枚举

116 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第11天,点击查看活动详情

大家好,我是芒果,一名非科班的在校大学生。对C/C++、数据结构、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:


枚举

枚举 -> 列举,把所有可能的取值->列举

enum Sex	//性别
{
    MALE,
    FEMALE,
    SECRET
    //SECRET, 
};

注意:

1.成员后面不是跟分号 是跟逗号,最后一个成员后面可以跟逗号,也可以省略不写

2.{}的最后面加分号

3.enum Sex这一整个是枚举类型 不要漏了前面的enum


这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初始值

enum Sex	//性别
{
    MALE,
    FEMALE,
    SECRET
    //SECRET, 
};
int main()
{
    printf("%d\n", MALE);  //0
    printf("%d\n", FEMALE);//1
    printf("%d\n", SECRET);//2
    return 0;
}

enum Sex	//性别
{
    MALE = 2,
    FEMALE,
    SECRET = 6
    //SECRET, 
};
int main()
{
    printf("%d\n", MALE);  //2
    printf("%d\n", FEMALE);//3	每次递增1
    printf("%d\n", SECRET);//6
    return 0;
}

注意:赋初始值时,后面跟的也是逗号 不是分号!!!同样,最后一个成员赋初始值可以不加逗号


枚举与整形

enum Color c = 4;

这个表达式是有问题的,c为枚举类型,4为整形,二者类型不匹配

image-20220310222957991


最好给枚举变量附枚举的可能取值

enum Color c = GREEN;

枚举类型的变量的值是整形,大小是4byte


枚举的应用

enum Color
{
    RED = 2,
    GREEN = 4,
    BLUE = 8
};
int main()
{
    enum Color c = GREEN;
    if(c == GREEN)
    {
        printf("绿色\n");
    }
    return 0;
}

使用枚举设置简易计算器

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 main()
{
	int input = 0;
	do
	{
		menu();
		printf("请输入你的选择->");
		scanf("%d", &input);
		switch (input)
		{
		case ADD:
			break;
		case SUB:
			break;
		case MUL:
			break;
		case DIV:
			break;
		case EXIT:
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

如果case内写1,2,3,4还要看1,2,3,4代表什么运算,但是如果用枚举就很直观


枚举的优点

我们可以使用#define 定义常量,为什么使用枚举,枚举的优点是什么

  • 1.增加代码的可读性和可维护性

  • 2.和#define定义的标识符比较,枚举有类型检查,更加严谨

  • 3.防止命名污染(封装)

  • 4.便于调试

    image-20220310223010126

  • 5.使用方便,一次可以定义多个常量