首页 理论教育 C语言程序设计-枚举类型及应用举例

C语言程序设计-枚举类型及应用举例

时间:2023-10-29 理论教育 版权反馈
【摘要】:枚举元素的数值也可以人为指定,在定义枚举类型时显式地指定。枚举类型应用举例,根据输入的数值输出相应星期几。

C语言程序设计-枚举类型及应用举例

在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,性别、月份、星期、颜色、学历等。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语句判断枚举变量的值,并执行对应的输出语句。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈