枚举
# 什么是枚举
- 枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读
- 在 C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的
# 枚举的定义
# 格式
枚举
enum 枚举名 {元素1, 元素2, ... ...};
1
例如:
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
1
也可以写成:
enum WEEK
{
MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
1
2
3
4
2
3
4
注意
枚举元素默认是从0开始的,依次递增。如果要修改请给任意元素手动赋值,且其后续依然自动递增
例如:
enum HELLO {A, B = 3, C, D};
1
这个时候A = 0
但是 B = 3
而后的元素递增
# 枚举变量的定义
刚刚定义的枚举名和后面的元素就相当于一个枚举的所有可能值,也就是定义域,有了定义域就会有取值为此范围内的变量也就是枚举变量
,其定义方式有三种:
枚举变量
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN};
enum WEEK day;
1
2
2
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
1
enum {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
1
# 枚举变量的赋值
你可以自由的给枚举变量赋上其定义域之内的值,不管是元素名或者元素值都可以:
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
day = MON;
// 等价于
day = 1;
1
2
3
4
2
3
4
提示
但是在将整型变量的值赋给枚举变量时,你最好先进行类型转换:
enum WEEK {MON = 1, TUE, WED, THU, FRI, SAT, SUN} day;
int a = 1;
day = (enum WEEK)a; // 进行类型转换
1
2
3
2
3
# 自问自答
至少我有以下疑问:
为什么要使用枚举?
因为它可以让数据更简洁,更易读;以上面的星期数为例,如果使用
#define
你需要7行代码才可以枚举变量的值可以超出枚举元素的范围吗?
可以,但没必要
# 应用
# 遍历
对于元素值连续的枚举变量,我们可以遍历;但是对于不连续的元素值,无法遍历:
for (day = MON; day <= SUN; day++) {
printf("%d\n", day);
}
1
2
3
2
3
# Switch 应用
case
的关键字可以使用枚举的元素名来时代码更加易读:
#include <stdio.h>
enum COLOR {RED, BLUE, GREEN} my_color;
int main()
{
prtinf("Please enter your color: 0 for red, 1 for blue, 2 for green: ");
sacnf("%d", &my_color);
switch (my_color) {
case RED:
printf("red\n");
break;
case BLUE:
printf("blue\n");
break;
case GREEN:
printf("green\n");
break;
}
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
编辑 (opens new window)
上次更新: 2020/08/16, 12:08:00