枚举类型相关
枚举是一种用户定义的数据类型,用关键字enum以如下语法来声明:
eunm 枚举类型名字{名字0,名字1,....,名字n};枚举类型名字通常不真的使用,要用的是在大括号里面的名字,因为他们就是常量符号,他们的类型只能是int,值则依次从0到n:
enum colors{red,yellow,green}; //创建三个常量:red==0,yellow==1,green==2当需要一些可以排列起来的常量值时,定义枚举的意义就是给这些常量值写名字
例子:
include<stdio.h> enum color {red,yellow,green}; //申明了这样一个数据类型color,也就相当于int,float,char等等 void f(enum color c); //使用这种数据类型必须带上enum这个字,叫做color这种枚举类型 int main(void) { enum color t =red; //t是enum color类型的变量,值为red scanf("%d",&t); //当作int类型输入 f(t); return 0; } void f(enum color c) { printf("%d\n",c); //当作int类型输出 }实际上C语言中enum就是int类型,所以每一个枚举变量是可以作为int类型输入输出
套路:自动计数的枚举 #include <stdio.h> enum COLOR {RED, YELLOW, GREEN, NumCOLORS}; //最后设置NumCOLORS计数,其值为前面枚举量个数 int main(int argc, char const *argv[]) { int color = -1; char *ColorNames [NumCOLORS] = //可以用NumCOLORS定义数组 { //也可以用NumCOLORS判断整数值是否在有效范围内 "red","yellow","green", //也可以用NumCOLORS进行遍历枚举量 }; char *colorName = NULL; printf("输入你喜欢的颜色的代码:"); scanf("%d", &color); if ( color >=0 && color < NumCOLORS) { colorName = ColorNames [color]; } else { colorName= "unknown"; } printf("你喜欢的颜色是%s\n",colorName); }声明枚举量的时候可以指定值
#include<stdio.h> enum COLOR{RED=1,YELLOW,GREEN=5,NumCOLORS}; //RED赋值为1,其后面的枚举量(YELLOW)就依次加1,,为2,GREEN赋值为5,其后的NumCOLORS依次加1就为6 int main(int argc,char const *argc[]) { printf("code for GREEN is %d\n",GREEN); //输出5 }枚举实际上只是int
即使给枚举类型的变量赋值不存在的整数,也没有任何报错或者警告
#include<stdio.h> enum COLOR{RED=1,YELLOW,GREEN=5,NumCOLORS}; int main(int argc,char const *argc[]) { enum COLOR color=0; printf("code for GREEN is %d\n",GREEN); //输出5 printf("and color is %d\n",color); //输出0,不报错 }