枚举
- 枚举定义
- 枚举 与 #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;
}



















![NSSCTF | [SWPUCTF 2021 新生赛]easy_sql](https://img-blog.csdnimg.cn/direct/b0fd4213324c4236af4b354d318e9bf5.png)