在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,性别、月份、星期、颜色、学历等。C中增加了一种基本数据类型——枚举类型,用来定义此类变量。所谓“枚举”是指将变量的值一一列举出来,变量取值不能超过此范围,当一个变量有几种可能的取值时,可以将它定义为枚举类型。
1.枚举类型的声明
声明枚举类型的一般形式为:
enum枚举名{枚举值列表};
在枚举值列表中,应罗列出所有取值,这些值也称为枚举元素或枚举常量。例如:
enum color{white,red,black,blue,yellow,green};
声明了一个枚举类型enum color,枚举元素共有6个,凡被定义为enum color类型变量的取值只能是这6个值中的某一个。
2.枚举变量的定义
同结构体和共用体一样,枚举变量也可用不同的方式定义,例如:
(1)先声明后定义
enum color{white,red,black,blue,yellow,green};
enum color a,b,c;
(2)同时声明定义
enum color{white,red,black,blue,yellow,green}a,b,c;
(3)直接定义
enum{white,red,black,blue,yellow,green}a,b,c;
需要注意:枚举类型在使用时有以下规定:
(1)枚举元素是常量,故也称为枚举常量,它不是变量,所以不能给枚举元素赋值。例如:“white=0;”“black=1;”都是错误的。
(2)枚举元素本身由系统定义了一个表示序号的整数,从0开始顺序定义为0,1,2…。在上面的定义中,white值为0,red值为1,…,green值为5,这些整数是可以输出的。
例如:
a=white;
printf("%d",a);
其中,a为enum color型枚举变量,则将输出整数0。
(3)枚举元素可以用来作判断比较。
例如:
if(white<black)…
if(white==black)…
枚举元素的比较规则是按其在定义时的顺序号比较的。如果定义时未人为指定,则第一个枚举元素的值默认为0,以此类推,故red>white,black>red。
(4)一个整数不能直接赋给一个枚举变量。例如:“a=1;”是错误的。它们属于不同的类型,应先进行强制类型转换才能赋值。
例如:
a=(enum color)1;
它相当于将red赋值给a,相当于:“a=red;”。
(5)枚举变量和常量一般可以参与整数的运算,如算术、关系、赋值等。如a=red+1是正确的。
(6)枚举元素的数值也可以人为指定,在定义枚举类型时显式地指定。
例如:
enum color{white=6,red=1,black,blue,yellow,green}a;
这里指定枚举元素white的值为6,red的值为1,其他元素的值顺次加1,即black的值为2,blue的值为3。(www.xing528.com)
(7)允许多个枚举元素有相同的值。没有指定值的枚举元素总是前一个的值顺次加1。
例如:
enum Number{a=1,b,c=1,d};
b和d的值均为2。
需要注意:以上枚举值都不能超过它的基础类型范围,否则会报错。
【例8.10】枚举类型应用举例,根据输入的数值输出相应星期几。
程序内容如下:
1 /*这是一个有关于 枚举类型 知识讲解的事例程序*/
2 #include<stdio.h>
3 #include<stdlib.h>
4 int main()
5 {
6 enum week{Sun,Mon,Tue,Wed,Thu,Fri,Sat}; //定义一个星期的枚举类型week
7 enum week day; //定义枚举变量day
8 int i; //定义整形变量i
9 printf("请输入0~6之间的一个数字:\n");
10 scanf("%d",&i); //输入一个i
11 day=(enum week)i; //强制类型转换,将整形的i转换为枚举型
12 switch(day) //判断枚举变量day的值
13 {
14 case 0:printf("星期日\n");break;
15 case 1:printf("星期一\n");break;
16 case 2:printf("星期二\n");break;
17 case 3:printf("星期三\n");break;
18 case 4:printf("星期四\n");break;
19 case 5:printf("星期五\n");break;
20 case 6:printf("星期六\n");break;
21 }
22 return 0;
23 }
程序结果如图8.17所示:
图8.17 例8.10程序结果图
【例题中关键问题说明】
(1)本程序中,定义enum week枚举类型,定义枚举变量day和整型变量i。
(2)从屏幕上输入一个整数i,将其强制类型转换为枚举型,通过switch语句判断枚举变量的值,并执行对应的输出语句。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。