枚举:
一、枚举
枚举的语法定义格式为:
enum 枚举名 {枚举元素1,枚举元素2,....}
举例
1 # define MON 1 2 # define TUE 2 3 # define WED 3 4 # define THU 4 5 # define FRI 5 6 # define SAT 6 7 # define SUN 7
1 enum DAY 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 };
第一个枚举成员的默认值为整形的0,后续枚举成员的值在前一个成员加上1。我们在这个实例中把第一个枚举成员的值定义为1,第二个就为2,以此类推。
1 enum season {spring,sunmmer=3,autumn,winter};
没有指定值的枚举元素,其值为前一元素加1.所以spring的值为0,summer的值为3,autumn的值为4,winter的值为5
刚才只是声明了枚举类型,并不是定义了枚举变量
二、枚举变量的定义
2.1先定义枚举类型,再定义枚举变量
1 enum DAY 2 { 3 MON=1,THE,WED,THU,FRI,SAT,SUN 4 }; 5 enum DAY day;
2.2定义枚举类型的同时定义枚举变量
1 enum DAY 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 }day;
2.3省略枚举名称,直接定义枚举变量
1 enum 2 { 3 MON=1,TUE,WED,THU,FRI,SAT,SUN 4 }day;
举例:
1 # include <stdio.h> 2 3 enum DAY 4 { 5 MON=1,TUE,WED,THU,FRI,SAT,SUN 6 }; 7 8 int main() 9 { 10 enum DAY day; 11 day=WED; 12 printf("%d",day); 13 return 0; 14 }
在C语言中,枚举类型是被当做int或者unsigned int来处理的,所以按照C语言的规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。
下面实例用for来遍历枚举的元素。
1 #include<stdio.h> 2 3 enum DAY 4 { 5 MON=1, TUE, WED, THU, FRI, SAT, SUN 6 } day; 7 int main() 8 { 9 // 遍历枚举元素 10 for (day = MON; day <= SUN; day++) { 11 printf("枚举元素:%d \n", day); 12 } 13 }
以下枚举类型不连续,这种枚举无法遍历
1 enum 2 { 3 ENUM_0, 4 ENUM_10 = 10, 5 ENUM_11 6 };
将整数转换为枚举:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 7 enum day 8 { 9 saturday, 10 sunday, 11 monday, 12 tuesday, 13 wednesday, 14 thursday, 15 friday 16 } workday; 17 18 int a = 1; 19 enum day weekend; 20 weekend = ( enum day ) a; //类型转换 21 //weekend = a; //错误 22 printf("weekend:%d",weekend); 23 return 0; 24 }
整理自菜鸟教程 https://www.runoob.com