首页 理论教育C语言程序设计基础:枚举类型定义和变量引用

C语言程序设计基础:枚举类型定义和变量引用

【摘要】:还可以在枚举类型定义中对枚举元素起始值作多次改变,每次改变后枚举值从该处开始递增直到遇到下一次起始值的指定为止。枚举数据类型定义完成后,仍然需要定义枚举变量才能使用,常见的方法有:①先定义枚举类型,然后定义枚举变量。枚举变量的输入输出示例。

在C语言中,枚举数据类型属于基本数据类型,但它并不是内置基本数据类型。程序中如果需要某种枚举类型仍然需要自行定义,枚举数据类型定义的一般形式为:

enum 枚举类型名{枚举元素标识符列表};

其中,enum是定义枚举类型的关键字,枚举元素必须使用合法的标识符予以表示。例如,下面语句定义了数据类型名为enum weekday的枚举数据类型:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};

枚举元素标识符不是字符常量也不是字符串常量,定义时不要加单、双引号。枚举元素在同一程序中唯一的,即使在不同的枚举类型中也不能存在同名的枚举元素标识符。

编译器在编译程序时,会给每一个枚举元素指定一个整型常量值。若枚举类型定义中没有给元素指定整型常量值,默认情况下,整型常量值从0开始依次递增。因此,枚举数据类型weekday的7个元素Sun、Mon、Tue、Wed、Thu、Fri、Sat对应的整型常量值分别为0、1、2、3、4、5、6。

定义枚举类型时也可以从某一枚举元素开始指定起始值,从指定位置之后的每个枚举元素值依次递增1。还可以在枚举类型定义中对枚举元素起始值作多次改变,每次改变后枚举值从该处开始递增直到遇到下一次起始值的指定为止。例如,下面的枚举定义语句:

enum Weekday{Thu=4,Fri,Sat,Sun,Mon=1,Tue,Wed};

从Thu到Sun的枚举常量值依次为4、5、6和7,接着的Mon到Wed的枚举常量值依次为1、2和3。

枚举数据类型定义完成后,仍然需要定义枚举变量才能使用,常见的方法有:

①先定义枚举类型,然后定义枚举变量。例如:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat};

enum weekday a,b,c;    //定义变量a,b,c

enum weekday day=Mon;//定义变量day并赋初值

②定义枚举类型与定义变量同时进行。例如:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}a,b,c; //同时定义变量a,b,c

③只定义几个某种枚举数据类型的枚举变量。例如:enum{Sun,Mon,Tue,Wed,Thu,Fri,Sat}a,b; //定义无枚举数据类型名的变量a,b

使用枚举数据类型和枚举变量时必须注意以下几点:①不能在程序中修改枚举元素对应的整数值,例如:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day;(www.chuimin.cn)

day=Sun;

Sat=7;//错误,Sat不是变量,Sat表示某常量值②枚举变量只能用枚举元素标识符进行赋值,不能把对应的整型常数值直接赋给枚举变量。例如:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day;

day=Wed;day=3;//错误

如一定要把常数值赋给枚举变量,则必须用强制类型转换。例如:

day=(enum weekday)3;//与语句day=Wed;等效

③枚举类型变量和枚举类型数据可以进行关系运算。

枚举变量可与元素常量进行关系比较运算,同类枚举变量之间也可以进行关系比较运算,它们之间的关系运算是按它们表示的序号值进行的。例如:

enum weekday{Sun,Mon,Tue,Wed,Thu,Fri,Sat}day1,day2;

day1=Wed;

day2=Mon;

则表达式day2>day1的值为0,表达式Sat>day1的值为1。

④程序中不能直接输入或输出枚举变量的值(即枚举元素的标识符,如Mon),只能输入或输出枚举变量值对应的序号值。

【例11.1】 枚举变量的输入输出示例。

程序的运行结果为:

RED--0,YELLOW--1,GREEN--2

输入颜色号(0--2):2

颜色号2:GREEN