枚举(Enumeration)即“一一列举”之意,当某些量仅由有限个数据值组成时,通常用枚举类型来表示。枚举类型(Enumerated Date Type)描述的是一组整型值的集合,需要用关键字enum来定义。例如:
enum response{no,yes,none};
enum response answer;
在上面的第一句声明了名为response的枚举类型,它的可能取值为:no,yes或none。这种定义形式和定义结构体模板很相似。
第二句定义了一个response枚举型变量answer。
在枚举类型声明语句中,花括号{和}内的标识符都是整型常量,称为枚举常量。除非特别指定,一般情况下第1个枚举常量的值为0,第2个枚举常量的值为1,第3个枚举常量的值为2,以后依次递增1。使用枚举类型的目的是提高程序的可读性。例如本例中使用no、yes、none比使用0、1、2的程序可读性更好。
可以用no、yes 或none中的任意一个值给变量answer赋值。例如:
answer = no;
变量answer还可以用在条件语句中,例如:
if(answer == yes)
{
//statement(s);
}
在上面的枚举类型声明语句中,response被称为枚举标签(Enumeration Tag),当枚举类型和枚举变量放在一起定义时,枚举标签可省略不写。
例如:enum { no,yes,none} answer;
也可定义枚举型数组。
例如:enum response answers[10];
C语言还允许在枚举类型定义时明确地指定每一个枚举常量地值
例如:enum response {no = -1,yes = 1,none =1 };
若要给response 添加其他可能取值,在其后的花括号内直接增加新的数值即可。
例如:enum response { no = -1,yes = 1,none = 0 ,unsure = 2};
其它常见的例子还有:
enum response { JAN = 1,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC};
这里,第一个枚举常量值被明确的设置为1,以下的常量依次递增1.
再如:enum week{Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday};
注意,虽然枚举标签后面花括号内的标识符代表枚举类型变量的可能取值,但其值是整型常量,不是字符串,因此只能作为整型值而不能作为字符串来使用。
例如:answer = yes;
printf(“%d”,answer);
上面这样写是正确的,而下面的语句则是错误的,不能达到输出字符串“yes”的目的。
printf(“%s”,answer);