枚举
- 枚举定义
- 枚举 与 #define
- 使用
- 写一个简易计算器的程序。
枚举定义
格式:
enum name(枚举什么类型)
{
//数据 ...
};
枚举,顾名思义一 一 列举。
在生活当中有很多可以列举的东西。
如:
//电脑桌面上的软件
enum App
{
QQ ,
WeChat,
CCtalk,
idea,
VisualStudio2022,
WeGame
};
//有意思的是,大学英语老师曾经让我上黑板默写星期一到星期天的英文。没写出来,真的好尴尬。
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
enum Sex
{
Man,
Woman,
Ladyboy
};
上面的enum Sex enum Day是枚举类型。
而括号里的内容是枚举类型的可能取值,也叫枚举常量。
1.这些可能的取值都默认有值的,默认是从0开始,每次加一。
#include<stdio.h>
//枚举中的数据有默认值从0,每次增加1
enum Day//星期
{
Mon,
Tues,
Wed,
Thur,
Fri,
Sat,
Sun
};
int main()
{
printf("Monday: %d\n", Mon);
printf("Tuesday: %d\n", Tues);
printf("Wednesday:%d\n", Wed);
printf("Thursday: %d\n", Thur);
printf("Friday: %d\n", Fri);
printf("Saterday: %d\n", Sat);
printf("Sunday: %d\n", Sun);
return 0;
}
2.这些默认的值也可以修改。
- 从6开始
- 先默认一些,再修改
枚举 与 #define
我们使用#define 就可以定义常量了,那为什么还要使用枚举呢?存在即合理呗
枚举的优点:
- 增加代码的可读性和维护性
- 枚举有类型检查更加严谨
- 便于调试,预处理阶段会删除#define定义的标识符
- 使用方便,一次可以定义多个常量
- 有作用域规则
使用
写一个简易计算器的程序。
#include<stdio.h>
void menu()
{
printf("--------------简易计算器-------------\n");
printf("-------------1.add-----2.sub-------\n");
printf("-------------3.mul-----4.div-------\n");
printf("-------------5.mod-----0.exit------\n");
printf("-----------------------------------\n");
}
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int mod(int a, int b)
{
return a % b;
}
enum Option
{
EXIT,//0
ADD,//1
SUB,//2
MUL,//3
DIV,//4
MOD //5
};
int main()
{
int input = 0;
int x, y, ret;
do {
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
printf("输入操作数:");
scanf("%d %d", &x, &y);
ret = add(x, y);
printf("ret = %d\n", ret);
break;
case SUB:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = sub(x, y);
printf("ret = %d\n", ret);
break;
case MUL:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = mul(x, y);
printf("ret = %d\n", ret);
break;
case DIV:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = div(x, y);
printf("ret = %d\n", ret);
break;
case MOD:
printf("输⼊操作数:");
scanf("%d %d", &x, &y);
ret = mod(x, y);
printf("ret = %d\n", ret);
break;
case EXIT:
printf("退出程序\n");
break;
default:
printf("选择错误\n");
break;
}
} while (input);
return 0;
}
当然我们也可以用转移表,更简单。enum的使用还是需要以后不断发现。
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void menu()
{
printf("--------------简易计算器-------------\n");
printf("-------------1.add-----2.sub-------\n");
printf("-------------3.mul-----4.div-------\n");
printf("-------------5.mod-----0.exit------\n");
printf("-----------------------------------\n");
}
int add(int a, int b)
{
return a + b;
}
int sub(int a, int b)
{
return a - b;
}
int mul(int a, int b)
{
return a * b;
}
int div(int a, int b)
{
return a / b;
}
int mod(int a, int b)
{
return a % b;
}
int main()
{
int select = 0;
int a, b;
int(*p[6])(int, int) = { 0,add,sub,mul,div,mod };//转移表
while(1)
{
menu();
printf("请输入选项:");
scanf("%d", &select);
if (select > 0 && select <= 5)
{
printf("\n请输入两位操作数:");
scanf("%d %d", &a,&b);printf("\n");
int end = p[select](a, b);
printf("结果:%d\n",end);
}
else if (select == 0)
{
break;
}
else
{
printf("输入有误请重新输入!");
}
}
return 0;
}