1
C语言程序设计
1.9.3 8.3 枚  举

8.3 枚  举

通过列举一系列由用户自己确定的有序标识符所定义的类型叫枚举类型(enum)。标识符名称代表一个数据值,其间有先后次序,可以进行比较,通常把标识符称为枚举类型的元素。枚举类型在日常生活中十分常见,它采用比较接近人类自然语言的方式表示有关信息,以提高程序的可读性,比如,颜色有红、黄、绿和蓝等;每周的天数有星期日、星期一、…、星期六;货币单位有分、角和元等;方向有上、下、左、右等;一个学校的教师队伍由教授、副教授、讲师和助教等组成。

枚举和结构一样,都是自定义的一种数据类型。枚举用关键字enum表示,定义枚举型的一般形式为:

  enum 枚举名{枚举表};

下面程序段定义一个称为color的枚举类型,并说明col是属于这种类型的变量:

  enum color{black,blue,red,green,white};

  enum color col;

给出上述定义之后,枚举变量col可以取且只能取枚举中任一个标识符,利用这个变量,下面的语句都是有效的:

img655

该赋值语句将产生错误,因为yellow不在列举出来的枚举值的范围之内。

对枚举类型的定义及变量的使用,其实质是编译程序将枚举中的每个标识符按次序用它们所对应的整型数来代替,在不进行初始化情况下,第一个枚举标识符的值为0,第二个为1,依次类推,因此:

  printf("%d%d%d%d%d",black,blue,red,green,white);

屏幕显示为0 1 2 3 4。

如果要改变缺省值进行初始化,可以通过在标识符后加一个等号和一个整型量来实现,例如:

  enum color{black,blue,red=5,green,white};

现在,这些标识符对应的整型数为:

  black 0

  blue 1

  red 5

  green 6

  white 7

在任何一个使用整形量的表达式中,可以使用枚举值,比如:

img656

在定义一个枚举类型时,与定义一个结构类型一样,数据类型名也可以省略,即当数据类型被定义的同时,可以定义变量为这一特定枚举数据类型,例如:

  enum{east,west,south,north}location;

用east、west、south和north定义了一个无名的枚举类型,并且定义了变量location为该数据类型。

枚举类型定义的存储特性与已经讨论过的变量的定义是一致的,即在一个函数中定义的枚举型数据只限于在该函数中使用。而在程序中任何函数之外定义的外部枚举型数据可以为所有函数共用。

下面举一个使用枚举数据类型的例子。程序在函数外部定义了一个枚举类型enum day,它以mon、wed、thu和fri来定义一周的学习日,显示出一周的上课情况。

例8-5 使用枚举数据类型的程序。

程序如下:

img657

常见的编程错误8.1

img658 将不在定义中的枚举常量赋给枚举类型的变量是一种编译错误。

img659 在枚举常量定义以后,试图给枚举常量赋予另一个值将导致编译错误。

良好的编程习惯8.1

img660 枚举常量的字母最好使用大写字母,这样在程序中这些常量就会突显出来,并且可以提醒程序员这些枚举常量不是变量。

img661 使用枚举而不是整型常量可以使程序更加清晰、更易维护,用户可以在声明枚举类型时一次性地设置枚举常量的值。