C语言的枚举

一·枚举类型的定义

语法:定义枚举变量的一般形式如下:
(1)先定义枚举类型,再定义枚举变量
enum 枚举类型名 变量名列表 ;
(2)在定义枚举类型的同时定义枚举变量
enum 枚举类型名
{
  枚举元素表
} 变量名列表 ;
语义:定义变量名列表中的各变量是枚举类型,编译器为各枚举变量分配存储空间。
enum WeekType {Mon,Tue,Wed,Thu,Fri,Sat,Sun} ; //定义枚举类型
enum WeekType today, nextday ; //声明枚举变量
enum WeekType是已经定义的枚举类型,enum不能省略
enum WeekType
{
Mon, Tue, Wed, Thu, Fri, Sat, Sun
} today, nextday ; //定义枚举类型同时声明枚举变量
可以省略枚举类型名,但在此定义后无法再定义这个类型的其他枚举变量
例子:定义枚举类型表示一周的七天。
enum WeekType { Mon, Tue, Wed, Thu, Fri, Sat, Sun } ;
枚举元素的默认值按照定义的顺序依次为0、1、2、……。
enum WeekType { Mon = 1, Tue, Wed, Thu, Fri, Sat, Sun } ;
在定义时指定某个枚举元素的值,其后面的枚举元素值依次加1,因此,枚举值依次为1、2、3、……。


二·枚举变量的初始化

语法:初始化枚举变量一般形式如下:
(1)先定义枚举类型,再定义枚举变量并初始化
enum 枚举类型名 变量名 = 初值 ;
(2)定义枚举类型的同时,定义枚举变量并初始化
enum 枚举类型名
{
  枚举元素表
} 变量名 = 初值;
语义:定义变量名列表中的各变量是枚举类型,编译器为各枚举变量分配存储空间并进行初始化。
enum WeekType {Mon,Tue,Wed,Thu,Fri,Sat,Sun} ; //定义枚举类型
enum WeekType today = Mon ; //定义枚举变量并初始化
enum WeekType
{
Mon, Tue, Wed, Thu, Fri, Sat, Sun
} today = Mon ; //定义枚举类型同时定义枚举变量


三·枚举变量的操作


1. 赋值操作
C语言规定:只能将枚举元素赋给枚举变量,不能直接把枚举值赋给枚举变量,但是,当枚举元素赋给一个枚举变量时,该变量实际得到的是该枚举元素的枚举值。
today = 1;

错误做法,一下是正确做法;

today = Mon;
today = (enum WeekType)1;


2. 输入/输出操作
由于不能直接把枚举值赋给枚举变量,因此,从键盘上输入一个整数后要进行强制类型转换再赋给枚举变量。

enum WeekType today; /*定义枚举变量today*/
int index;
scanf("%d", &index);
today = (enum WeekType)index; /*将index强制转换为枚举元素*/

枚举变量不能直接输出枚举元素,一般使用switch语句输出。
enum WeekType day; /*定义枚举变量day*/
switch (day) /*输出对应的星期名*/
{
case Mon: printf("Monday"); break;
case Tue: printf("Tuesday"); break;
case Wed: printf("Wednesday"); break;
case Thu: printf("Thursday"); break;
case Fri: printf("Friday"); break;
case Sat: printf("Saturday"); break;
case Sun: printf("Sunday"); break;
default: break;
}

3. 其他操作
本质上,枚举类型是缩小范围的int型,因此,枚举变量可以执行int型数据允许的操作,例如+、-、*、/等算术运算,以及以值传递方式作为函数的形参。
enum WeekType today = Mon, nextday;
nextday = (enum WeekType)(Mon + (today - Mon + 1) % 7);

小结:
问题:在现实世界中,满足什么条件的数据可以定义为枚举类型?
数据的值是有限的,并且在允许的时间范围内可以穷举
数据的值在一个时刻只能取有限个中的一个,例如:性别、硬币的状态、游戏的结果

 /*来自老师上课是的ppt,嘿嘿,大学一路C*/

原文地址:https://www.cnblogs.com/hello-dummy/p/9010055.html