如果一个变量只有几种可能的值,那么这个变量可以被定义为枚举类型。
枚举的意思就是把可能的值一一列举出来,那么变量的值也只限于列举出来的范围中。
枚举类型的说明:
1.声明:enum Color{red,yellow,blue,white,black};
2.定义:enum Color i,j,k,pri;
3.枚举元素代表一个整数,默认顺序是从0开始,可以用%d来输出,比如
#include <stdio.h>
int main()
{
enum Color{red,yellow,blue,white,black};
enum Color i,j,k,pri;
int n,loop;
n = 0;
i = red;
printf("%d",i);
getchar();
return 0;
}
此时打印出来的是0,但是不支持输出字符串
printf("%s",i);
此时输出为null。
4.枚举类型可以进行比较,比如
#include <stdio.h>
int main()
{
enum Color{red,yellow,blue,white,black};
enum Color i,j,k,pri;
int n,loop;
n = 0;
i = red;
j = yellow;
if (i <j)
{
printf("yes!!");
}
getchar();
return 0;
}
此时能打印出yes!!
5.C99标准把枚举类型作为一种整型数据,所以枚举类型是应该支持自加一操作的,《谭浩强 C程序设计》中也应用了枚举类型自加的操作,比如我们写这样一个代码:
#include <stdio.h>
int main()
{
enum Color{red,yellow,blue,white,black};
enum Color i,j,k,pri;
int n,loop;
n = 0;
for ( i = red;i <black;i++)
{
printf("当为第%d个颜色\n",i);
}
getchar();
return 0;
}
这时应该打印出4列话才对,但是我用vs2010 把文件后缀改成.c,该代码是报错的。
所以我只能理解为微软对C语言的支持不是太好,C99中的一些特性并没有支持。
换个角度想,其实应用枚举类型自加操作本身也不太好,当我们使用默认的顺序而不是在声明时指定,枚举元素才是连续的,指定后元素将不再连续,比如
#include <stdio.h>
int main()
{
enum Color{red = 5,yellow = 3,blue,white,black};
enum Color i,j,k,l,m;
i = red;
j = yellow;
k = blue;
l = white;
m = black;
printf("i为%d\n",i);
printf("j为%d\n",j);
printf("k为%d\n",k);
printf("l为%d\n",l);
printf("m为%d\n",m);
getchar();
return 0;
}
结果: