#include <stdio.h>
enum week { End, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
void monday(void){
puts("星期一");
}
void tuesday(void){
puts("星期二");
}
void wednesday(void){
puts("星期三");
}
void thursday(void){
puts("星期四");
}
void friday(void){
puts("星期五");
}
void saturday(void){
puts("星期六");
}
void sunday(void){
puts("星期天");
}
enum week select(void){
int tmp;
do {
printf("0. 结束, 1. 星期一, 2. 星期二, 3. 星期三, 4. 星期四, 5. 星期五, 6. 星期六, 7. 星期天\n");
puts("请选择:");
scanf("%d", &tmp);
}while (tmp < End || tmp > Sunday);
return tmp;
}
int main(void){
enum week selected; // 声明 enum week 型 的变量 selected
do{
switch (selected = select()){
case Monday :
monday();
break;
case Tuesday :
tuesday();
break;
case Wednesday :
wednesday();
break;
case Thursday :
thursday();
break;
case Friday :
friday();
break;
case Saturday :
saturday();
break;
case Sunday :
sunday();
break;
}
}while (selected != End);
return 0;
}
运行结果:
enum week { End, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday };
是枚举类型的声明,它表示了所有可用值的集合。其中,week 被称为枚举名。写在{}中的 End, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday 是枚举常量。
注:枚举名不是类型名。类型名称不是 week 型,而是 enum week 型。
如果在没有赋值给枚举常量赋值的情况下,枚举常量默认对应的值是从0开始按顺序为枚举常量定义了相应的整数值。实际上,这些值也能根据需要任意设置,只要在枚举常量的名称后面写上赋值运算符 “=” 和值就行了。
enum week { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, End };
通过赋值运算符 “ = ” 赋值的枚举常量,其值为给定值,没有给定值的枚举常量,其值为前一个枚举常量加1。
#include <stdio.h>
enum week { Monday = 1, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday, End };
void monday(void){
puts("星期一");
}
void tuesday(void){
puts("星期二");
}
void wednesday(void){
puts("星期三");
}
void thursday(void){
puts("星期四");
}
void friday(void){
puts("星期五");
}
void saturday(void){
puts("星期六");
}
void sunday(void){
puts("星期天");
}
enum week select(void){
int tmp;
do {
printf("1. 星期一, 2. 星期二, 3. 星期三, 4. 星期四, 5. 星期五, 6. 星期六, 7. 星期天, 8. 结束\n");
puts("请选择:");
scanf("%d", &tmp);
}while (tmp < Monday || tmp > End); // 将 End 在枚举类型末端,星期一 位于首端
return tmp;
}
int main(void){
enum week selected; // 声明 enum week 型 的变量 selected
do{
switch (selected = select()){
case Monday :
monday();
break;
case Tuesday :
tuesday();
break;
case Wednesday :
wednesday();
break;
case Thursday :
thursday();
break;
case Friday :
friday();
break;
case Saturday :
saturday();
break;
case Sunday :
sunday();
break;
}
}while (selected != End);
return 0;
}
运行结果:
enum { MATGEMATICS, ADVANCED_MATHEMATICS = 0 };
程序中的枚举名可以省略,多个枚举常量也允许具有相同的值。
#include <stdio.h>
enum { MATGEMATICS, ADVANCED_MATHEMATICS = 0 };
void mathematics(void){
puts("数学");
}
void advanced_mathematics(void){
puts("高等数学");
}
int main(void){
int tmp;
puts("请选择:");
scanf("%d", &tmp);
switch (tmp){
case MATGEMATICS :
mathematics();
break;
}
switch (tmp){
case ADVANCED_MATHEMATICS :
advanced_mathematics();
break;
}
return 0;
}
运行结果: