15. 枚举
一、什么是枚举变量
枚举是 C 语言中的一种数据类型,它可以让数据更简洁,更易读,对于只有几个有限的特定类型,可以使用枚举。枚举是一组常量的集合,包含一组有限的特定的数据。
二、枚举类型的定义
在 C 语言中,我们可以使用 enum 关键字声明枚举类型变量。一个枚举变量包含一组相关的标识符,其中每个标识符都对应一个整数值,称为 枚举常量。它的定义格式如下:
enum 枚举类型名
{
标识符1[=值1],
标识符2[=值2],
标识符3[=值3],
...
标识符n[=值n]
};
在定义枚举类型的变量时,可以为某个特定的标识符指定对应的整数值,紧随其后的标识符对应的值依次加 1。如果没有为枚举变量显示的指定整数值,默认从 0 开始,依次递增。如果为枚举变量中间的某个标识符指定对应的值,那么它之前的标识符对应的整数值从 0 开始,它后面的标识符对应的整数值从该值开始依次加 1。
一个枚举变量包含一组相关的标识符,其中每个标识符都对应一个整数值,称为枚举常量;
每个标识符都必须是唯一的,而且不能采用关键字或当前作用域内其它相同的标识符;
三、枚举变量的定义
【1】、声明枚举类型,再定义变量
enum 枚举类型名 变量名;
【2】、在声明枚举类型时定义变量
enum 枚举类型名
{
标识符1[=值1],
标识符2[=值2],
标识符3[=值3],
...
标识符n[=值n]
}变量名1, 变量名2, ..., 变量名n;
定义的变量不是只能有一个,可以定义多个变量;
【3】、直接定义枚举类型变量
如果我们只需要确定个数的枚举变量,后面不需要再使用枚举类型定义变量,我们可以在定义时不给出枚举类型名。
enum
{
标识符1[=值1],
标识符2[=值2],
标识符3[=值3],
...
标识符n[=值n]
}变量名1, 变量名2, ..., 变量名n;
四、枚举变量的赋值
【1】、先声明变量再对变量赋值
enum 枚举类型名 变量名;
变量名 = 枚举常量;
【2】、声明变量的同时赋初值
enum 枚举类型名 变量名 = 枚举常量;
【3】、定义类型的同时声明变量,然后对变量赋值
enum 枚举类型名
{
标识符1[=值1],
标识符2[=值2],
标识符3[=值3],
...
标识符n[=值n]
}变量名;
变量名 = 枚举常量;
【4】、类型定义,变量声明,赋初值同时进行
enum 枚举类型名
{
标识符1[=值1],
标识符2[=值2],
标识符3[=值3],
...
标识符n[=值n]
}变量名 = 枚举常量;
枚举变量的取值范围是固定的,只可以再枚举常量中选择;
对枚举型的变量赋整数值时,需要进行类型转换 ,即 变量名 = (enum 枚举类型名)整数值。
五、枚举的优点
我们可以用 #define 定义宏常量,那么我们为什么要使用枚举呢?这是因为,枚举具有以下优点:
- 枚举可以增加代码的可读性和可维护性;
- 和 #define 定义的标识符相比,枚举变量有类型检查,更加严谨;
- 枚举防止了命名污染;
- 使用枚举变量便于调试;
- 枚举使用方便,一次可以定义多个常量;
六、枚举的使用
枚举类型只能在内部使用,如果要输入枚举变量中的某个枚举值,只能输入它对应的整数值,不能输入它的标识符。因为枚举类型是整数类型,所以可以在表达式中使用整数变量的方式来使用 enum 变量,它们用在 case 中很方便。
#include <stdio.h>
enum WEEK
{
MONDAY = 1,
THESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
int main(void)
{
int day = 0;
printf("请输入一个星期:");
scanf("%d",&day);
switch(day)
{
case MONDAY:
printf("你输入的是星期一\n");
printf("%d\n",MONDAY);
break;
case THESDAY:
printf("你输入的是星期二\n");
printf("%d\n",THESDAY);
break;
case WEDNESDAY:
printf("你输入的是星期三\n");
printf("%d\n",WEDNESDAY);
break;
case THURSDAY:
printf("你输入的是星期四\n");
printf("%d\n",THURSDAY);
break;
case FRIDAY:
printf("你输入的是星期五\n");
printf("%d\n",FRIDAY);
break;
case SATURDAY:
printf("你输入的是星期六\n");
printf("%d\n",SATURDAY);
break;
case SUNDAY:
printf("你输入的是星期七\n");
printf("%d\n",SUNDAY);
break;
default:
printf("你输入有误\n");
break;
}
return 0;
}