枚举的作用
有一种变量类型,它的值只有固定的几种选择之一,比如性别(男、女)、硬币的两面(正、反)、星期(周一到周日)、居住省份(36个省市自治区名称)等等,这样的变量适合用enum枚举类型。
使用枚举
说明:
※自定义的类型一般都放在main函数前面,枚举也遵循这个规律:
enum sex{boy,girl};
main(){…}
※枚举类型在定义时,系统会自动用整数为枚举的可用值从0开始用整数进行编号,如上面的boy的值为0,girl为1,也可以用printf(“%d”,gril)这样的语句输出。
枚举值也可以叫做“符号常量”,有时候用英文单词组成的符号常量来代替简单的数字,会使程序的可读性大大提高。比如我们看到boy第一反应这就是男孩,而你看到数字0,并不知道这表示什么意思。
可以通过赋值来改变枚举常量的值:
enum color{red=4,green=1,blue,black};
这条语句中从blue开始会自动往后递增,blue的值为2,black为3。
※不能给枚举常量赋值,比如boy=2,这是错误的写法。
※枚举常量相当于一个关键字,程序中不得出现与枚举常量相同的标识符。
※枚举支持所有的逻辑运算,也可以递增递减,比如上面的枚举类型color值为green,color++就得到blue,color+=2就得到black。有了这个规律,我们就用循环来处理枚举变量就非常方便。
程序1
箱子里有3种不同颜色(红绿蓝)的乒乓球若干个,请任意摸3个,如果摸到2个相同颜色的为二等奖,奖金1元,摸到3个相同颜色的为一等奖,奖金10元。
// 24-1枚举类型例子.c // #include <stdio.h> enum color{red,blue,green}; main() { enum color ball[3]; int r; srand(time(0)); for (int i = 0; i < 3; i++) { r = rand() % 3; switch (r) { case 0: ball[i] = red; break; case 1: ball[i] = blue; break; case 2: ball[i] = green; break; } } for (int i = 0; i < 3; i++) { switch (ball[i]) { case red: printf("red "); break; case blue: printf("blue "); break; case green: printf("green "); break; } } }
枚举常量不支持直接的输入输出,因此,枚举变量经常会跟swith联用而达到直观的文字输出效果。
我国规定周六和周日双休日,请输入一个星期几,由程序判断并输出这一天是否是休息日。
// 24-2枚举选择星期几.c #include <stdio.h> enum Week { monday = 1, tuesday = 2, wednesday = 3, thursday = 4, friday = 5, saturday = 6, sunday = 7 }day; main() { int i; printf("请输入星期几,(数字 1~ 7 ,1代表星期一...7:星期日)\n"); scanf_s("%d", &i); switch (i) { case 1: day = monday; break; case 2: day =tuesday; break; case 3: day = wednesday; break; case 4: day = thursday; break; case 5: day = friday; break; case 6: day = saturday; break; case 7: day = sunday; break; } switch (day) { case saturday: case sunday: printf("今天是休息日!"); break; default: printf("今天是工作日!"); } }