1.枚举类型的声明
- 枚举顾名思义就是一一列举,把可能的取值一一列举。
比如我们现实生活中:
- 一周的星期⼀到星期日是有限的7天,可以一一列举。
- 性别有:男、女、保密,也可以一一列举。
- 月份有12个月,也可以一一列举。
- 三原色,也是可以一一列举。
这些数据的表示就可以使用枚举了,代码如下:
#include<stdio.h>
enum Day//星期
{
//该枚举类型有七种可能值,它们都是常量,被称为枚举常量
Mon,
Tues,
Wed,
Thur=9,
Fri,
Sat,
Sun
};
int main()
{
enum Day day1 = Mon;
enum Day day2 = Sun;
enum Day day3 = 7;//error,不能为枚举类型的变量(day3)赋值,只能赋值为枚举常量(Sun)
printf("%d\n", Mon);//0
printf("%d\n", Tues);//1
printf("%d\n", Wed);//2
printf("%d\n", Thur);//9
printf("%d\n", Fri);//10
printf("%d\n", Sat);//11
printf("%d\n", Sun);//12
return 0;
}
- 以上定义的 enum Day ,是枚举类型。
- { }中的内容是枚举类型的可能取值,也叫枚举常量。
- 枚举类型的值通常是整数常量。
- 这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也可以赋初值,后面的值也是依次递增1。
2.枚举类型的优点
- 我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点:
-
增加代码的可读性和可维护性。
-
和 #define 定义的标识符比较枚举有类型检查,更加严谨。
-
便于调试,预处理阶段会删除 #define 定义的符号。
-
使用方便,一次可以定义多个常量。
-
枚举常量是遵循作用域规则的,枚举声明在函数内,只能在函数内使用。
3.枚举类型的使用
- 枚举举例:写一个计算器完成整数的加法,减法,乘法,除法
#include<stdio.h>
enum Option
{
EXIT,//0
ADD,//1
SUB,//2
MUL,//3
DIV//4
};
void menu()
{
printf("*************************\n");
printf("**1:add 2:sub**\n");
printf("**3:mul 4:div**\n");
printf("**0:exit \n");
printf("*************************\n");
}
int Add(int x, int y)
{
return x + y;
}
int Sub(int x, int y)
{
return x - y;
}
int Mul(int x, int y)
{
return x * y;
}
int Div(int x, int y)
{
return x / y;
}
int Cal(int(*pf)(int, int))
{
int ret = 0;
int x = 0;
int y = 0;
printf("请输入两个数:>");
scanf("%d %d", &x, &y);
ret = pf(x, y);
printf("%d\n", ret);
}
int main()
{
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
Cal(Add);
break;
case SUB:
Cal(Sub);
break;
case MUL:
Cal(Mul);
break;
case DIV:
Cal(Div);
break;
case EXIT:
printf("退出\n");
break;
default:
printf("选择错误,请重新选择\n");
break;
}
} while (input);
return 0;
}