在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型 显然是不妥当的。C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值, 被说明为该“枚举”类型的变量取值不能超过定义的范围。枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。

枚举enum就是英文enumerate的缩写,也就是列举、排列说明的意思。枚举类型是C语言中的一种特殊类型,本质上也是算术类型,枚举类型可以让我们的程序使用一些固定长度和固定数值的变量值范围。
枚举一旦定义就不能对它们后期去赋值,只能将它们的值赋给其他的变量。
枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。
C语言编译器会将枚举元素作为整型常量处理,称为枚举常量。
在定义枚举类型时可以改变枚举元素的值,使用的时候不能改变枚举的值
枚举元素的值取决于定义时各枚举元素排列的先后顺序。默认情况下,第一个枚举元素的值为0,第二个为1,依次顺序加1
枚举不写对应的值,枚举值默认从0开始
enum 枚举名 {
名称1, //0
名称2, //1
...
};
枚举也可以手工指定各个名称的值,语法格式如下:自定义枚举中每个元素对应的整数值,例如名称1的值为10,名称2的值为20。
enum 枚举名 {
名称1 = 10,
名称2 = 20,
...
};
如果我们想让枚举的起始值从1开始那么可以像这样
enum weekday
{
Mon = 1,
Tues,
Wed,
Thurs,
Fri,
Sat,
Sun
};
列:
#include
//枚举颜色
enum color{red=1, oreange=2, yellow=3, green=4, ching=5, blue=6, purple=7};
//枚举一个星期的每一天 ,如果不赋值,默认枚举的值从0开始
enum week
{
Su, Mo, Tu, We, Th, Fr, Sa
};
//枚举每一个月(12个月)
enum month
{
January, February, March, April, May, June, July, August, September, October, November, December
};
int main() {
printf("%-3d %-3d %-3d %-3d %-3d %-3d %-3d \n", red, oreange, yellow, green, ching, blue, purple);
printf("%d %d %d %d %d %d %d\n", Su, Mo, Tu, We, Th, Fr, Sa);
printf("%d %d %d %d %d %d %d %d %d %d %d %d \n", January, February, March, April, May, June, July, August, September, October, November, December);
return 0;
}

枚举是一种类型,定义完毕类型后,还必须有定义枚举变量操作枚举,就好比买了汽车不会开,那么买车有啥用,
enum week{ Su, Mo, Tu, We, Th, Fr, Sa};
enum week a, b, c; //定义枚举变量
//给枚举变量赋值
a=Su;
b=Tu;
c=Sa;
也可以在定义枚举类型的同时定义变量和赋值:
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a=Mon, b=Tues, c=Sun;
判断用户输入的是星期几
#include
int main(){
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
scanf("%d", &day); //用户输入,给day枚举变量赋值
//判断用户输入符合啥条件
switch(day){
case Mon: puts("Monday"); break; //puts直接输出字符串
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
case Sat: puts("Saturday"); break;
case Sun: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}

