枚举小套路

举报
吴梦青 发表于 2022/06/15 23:59:38 2022/06/15
【摘要】 1. 套路:自动计数的枚举在枚举的时候,所有的量都是依次递增的所以最后一个是计数,记录了前面有几个数。用最后一个名字来表示这个枚举量中有多少个值。这也是枚举中的套路这样需要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候就很方便了。用最后一个名字划定范围,比如说输入一个数字,看这个数值是否在程序的有效范围内最后一个名字可以作为for遍历的限定条件#include <stdio.h...

1. 套路:自动计数的枚举

  • 在枚举的时候,所有的量都是依次递增的
    • 所以最后一个是计数,记录了前面有几个数。
    • 用最后一个名字来表示这个枚举量中有多少个值。这也是枚举中的套路
    • 这样需要遍历所有的枚举量或者需要建立一个用枚举量做下标的数组的时候就很方便了。
    • 用最后一个名字划定范围,比如说输入一个数字,看这个数值是否在程序的有效范围内
    • 最后一个名字可以作为for遍历的限定条件
#include <stdio.h>

enum COLOR {RED, YELLOW, GREEN, NumCOLORS};

int main(int argc, char const *argv[]) {
	int color = -1;
	char *ColorNames[NumCOLORS] = {
		"red", "yellow", "green",
	};
	char *colorName = NULL;
	printf("输入你喜欢的颜色的代码:");
	scanf("%d", &color);
	if (color >= 0 && color < NumCOLORS) {
		colorName = ColorNames[color];
	} else {
		colorName = "unknown";
	}
	printf("你喜欢的颜色是%s\n", colorName);
	return 0;
}

总结:这个代码用枚举的值代表颜色,当用户输入颜色数字时,程序会判断这个颜色是在012这个范围内,如果在的话,输出颜色数字代表的颜色,否则输出不知道。

2. 枚举量

  • 声明枚举量的时候可以指定值
    • 这是个离散的序列
    • red是1,yellow是1+1=2,green是5
    • 中间的三和四就跳过了
    • enum COLOR {RED=1,YELLOW,GREEN=5};
#include <stdio.h>
 
enum COLOR {RED = 1, YELLOW, GREEN = 5, NumCOLORS};
int main(int argc, char const *argv[]) {
	printf("code for GREEN is %d\n", GREEN);
	return 0;
}

3. 枚举实际上只是int

  • 即使给枚举类型的变量赋不存在的整数值也没有用任何warning或error
#include <stdio.h>
 
enum COLOR {RED = 1, YELLOW, GREEN = 5, NumCOLORS};
int main(int argc, char const *argv[]) {
	printf("code for GREEN is %d\n", GREEN);
        printf("and code is %d\n", color);
	return 0;
}

总结:0是没有意义的值,但是在这里也不会报错。

4. 枚举

  • 虽然枚举类型可以当作类型使用,但是实际上很(bu)少(hao)用
  • 如果有意义上排比的名字,用枚举比const int方便
  • 枚举比宏(macro)好,因为枚举有int类型
  • 枚举是c语言里面不成功的功能
  • 人们主要是把它当作一种符号量,很少使用枚举这个功能
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。