5.5.2 枚举变量的赋值和使用
在声明枚举类型时,如果没有进行初始化赋值,即省略“标识符[=整型常量]”不写,则系统会自动赋给一个表示序号的数值,枚举元素从0开始顺序赋值为0、1、2等。如果枚举中的某元素被赋值,其后的枚举元素按依次加1的规则,确定其值。
例如,在声明枚举类型weekday中,没有进行初始化,系统便依次定义Monday值为0,Tuesday值为1,……,Sunday值为6。程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
enum weekday//声明枚举类型
{
Monday,//枚举元素0,星期1
Tuesday,//枚举元素1,星期2
Wednesday,//枚举元素2,星期3
Thursday,//枚举元素3,星期4
Friday,//枚举元素4,星期5
Saturday,//枚举元素5,星期6
Sunday,//枚举元素6,星期7
}a,b,c;//声明枚举变量
a=Monday;//变量赋值
b=Saturday;
c=Sunday;
printf(“a=%d,b=%d,c=%d\n”,a,b,c);//输出结果
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
a=0,b=5,c=6
本例中,先声明了枚举类型weekday,同时声明了枚举变量a、b和c。接着,对将枚举元素的值分别赋给枚举变量,并打印输出其结果。因为枚举类型weekday没有进行初始化,所以采用系统默认赋值,即0~6。
在程序中使用枚举类型时,要注意以下几点。
❑枚举元素值是常量,而不是变量。不能在程序中用赋值语句再对其进行赋值或修改。例如,对上例中声明的枚举weekday的枚举元素,进行以下赋值操作。这些语句都是错误的。
Sunday=5;//错误
Monday=2;//错误
Sunday=Monday;//错误
❑只能把枚举元素赋值给枚举变量,而不能直接把枚举元素的值赋给枚举变量,示例如下。
a=Sunday;b=Monday;//是正确的
a=6;b=0;//是错误的。虽然Sunday的值为6,Monday的值为0
如果一定要强调把枚举元素的数值赋给枚举变量,则必须用强制类型转换,示例如下。
a=(enum weekday)3;
等价于如下形式。
a=Thursday;
❑枚举元素不能是字符常量,也不能是字符串常量。因此定义枚举元素用时,不要加单、双引号。
❑对枚举元素进行赋值时,可以为其赋值为负数,被赋值的枚举元素其后的成员按依次加1的规则,确定其值。程序示例如下。
include<stdio.h>//头文件
void main()//主函数
{
enum//声明枚举和枚举变量
{
t1,
t2=-3,//枚举元素赋初值
t3,
t4=11,
t5,
}t;
t=t1;//枚举变量赋值
printf(“t1=%d\n”,t);//输出结果
t=t2;//枚举变量赋值
printf(“t2=%d\n”,t);//输出结果
t=t3;//枚举变量赋值
printf(“t3=%d\n”,t);//输出结果
t=t4;//枚举变量赋值
printf(“t4=%d\n”,t);//输出结果
t=t5;//枚举变量赋值
printf(“t5=%d\n”,t);//输出结果
}
该程序可以在KeilµVision3编译环境中执行,运行的结果如下。
t1=0
t2=-3
t3=-2
t4=11
t5=12
本例中,首先声明了枚举变量t,因为第一个枚举元素t1未赋值,所以默认值为0;枚举元素t2赋了初值-3;枚举元素t3未赋值,其值为t2+1=-2;枚举元素t4赋了初值11;枚举元素t5未赋值,其值为t4+1=12。最后,分别对t进行赋值,并打印输出其结果。