在C中定义了一种特殊的数据类型:枚举。但这并不是C的首创,之前Pascal有,C之后的Java也有,但是C的枚举类型并不是那么的好用。今天在看视频的时候,翁恺老师正好在讲枚举,也就在此总结一下。
枚举的好处在于它可以使一些数字符号化,然后增强程序的可读性。当然const double pi=3.14这种方法也可以达到这样的效果,但如果很多数字都需要这样的处理,那么枚举就很方便了。
enum 枚举类型的名字{name0,name1…namen}
这就是枚举的格式 ,注意枚举中的那些name之类的符号并不是真正意义上的符号,而是整形。如name0到namen,就是0-n-1.(当然我们也可以单独赋特定的值),所以输出和输入枚举类型的时候都需要按照整形来处理。
如:
#include <stdio.h> enum COLOR{red,green,blue}; int main() { enum COLOR color; scanf("%d",&color); printf("%d",color); //输入和输出仍然是整形数据,不能输入字符串。。。 return 0; }
#include <stdio.h> enum COLOR{red,green,blue}; void fun(enum COLOR color) { printf("%d",color); } int main() { enum COLOR color=red; fun(color); return 0; }
永远记住C语言中枚举仍然是按照整形变量来处理的,自然包括输入和输出。
同时枚举类型中可以有一个自动计数的小套路,当我们没有给name0-namen赋值的时候,它的值是0-n-1。所以我们可以用一个无意义叫做Nums的东西放到枚举变量中的最后,用来统计这个枚举变量中一共有多少个量(当然是指有意义的)。
如:
enum COLOR{red,green,blue,Nums};
通过这种方式,也可以运用到for循环等语句结构中。
但我们需要小心的是,如果直接赋一个整形的数据给枚举变量,现在的编译器是不会报错的。但这样的后果也就会导致我们可能得到了一个没有实际意义的结果。因为枚举本身就是为了方便阅读程序。
#include <stdio.h> enum COLOR{red=1,green,blue}; void fun(enum COLOR color) { printf("%d\n",color); } int main() { enum COLOR color=red; enum COLOR color2=0; fun(color); fun(color2); return 0; }
如,这里0在COLOR中并没有意义,但是还是会输出一个0。