枚举是一种常用的自定义数据类型,可以用于标记,选择,提高程序可读性.
曾经看见过有趣的事情,程序员最大的难题是什么?"给函数命名"位列榜首,占了50%以上的比例.还经常有人抱怨说自己前不久写的代码自己都不认识了得从头捋.我不想去评论专业程度或者敬业精神,但侧面反映出注释的重要性.
一个好的程序,是需要别人快速看懂理解,和易于维护的.在一定程度上决定了代码质量.
那么在一段程序中,获取状态同样重要,我们需要调用一个程序来提取当前某个状态值,且这个状态值是很容易理解的符号---比如说一个单词,而非赤裸的数值.这也是枚举设计的初衷.
以颜色为例,建立一个枚举类型
typedef enum Color{RED,GREEN,BLUE}Color; //以三原色为例.
枚举定义格式: typedef + enum + 枚举类型名 + {枚举值1,枚举值2...........}枚举类型名+分号
1>枚举是一种自定义数据类型,枚举值一般用大写符号常量表示
2>枚举值可以有数值表示,如可以写成{RED=0,GREEN=1,BLUE=2} ,但不推荐使用
说明:为什么不推荐数值?因为合理的函数设计可以不用.
3>枚举有变量,但不能用指针指向枚举变量.
某数据类型变量定义: 类型名 变量名= 值; //复习数据的定义.
某数据类型指针定义: 类型名 * 指针变量 =&变量名 //数据指针定义,枚举无此定义
枚举属于自定义数据类型,使用时必然有变量. 但是没有给其设计指针 //规则,记住即可
说明:某变量的值,必属于几个状态中的一个状态,可以使用枚举来标记.
举例: 假如把月份分类--2,3,4月属于春季;5,6,7月属于夏季;8,9.10月属于秋季;11,12,1月属于冬季.编写一个函数,输入月份,返回所属季节.
typedef enum Season{SPRING,SUMMER,AUTUMN,WINTER}Season;
Season getSeason(int month){
if(month==2||month==3||month==4)
return SPRING;
else if(month==5||month==6||month==7)
return SUMMER;
else if(month==8||month==9||month==10)
return AUTUMN;
else
return WINTER;
}
看到这里,您可能会问,这个函数干了什么,不就是给变量改了个名吗?
是的,您的看法很正确.但不可否认,如果程序员面对的数据很多,有时候还是挺好用的.
说明:当需要表达某种情况下做某些事,可以使用枚举.
举例:春天郊游,夏天避暑,秋天骑马,冬天吃火锅.
typedef enum Season{SPRING,SUMMER,AUTUMN,WINTER}Season;
void doSelect(Season season){
if(season==SPRING)
printf("郊游");
else if(season==SUMMER)
printf("避暑");
else if(season==AUTUMN)
printf("骑马");
else
printf("吃火锅");
}
这种写法还是挺常见的.因为他表达很清晰
可以把两种形式结合起来使用.
#include
typedef enum Season{SPRING,SUMMER,AUTUMN,WINTER}Season;
Season getSeason(int month);
void doSelect(Season season);
int main(void){
int month;
printf("请输入月份\n");
while(!scanf("%d",&month)||month<0||month>12) /*保证输入1-12之间整数*/
{
printf("输入有误,请输入1-12间的整数\n");
continue; /*重新定位到循环开头*/
}
Season season=getSeason(month);
doSelect(season);
}
Season getSeason(int month){
if(month==2||month==3||month==4)
return SPRING;
else if(month==5||month==6||month==7)
return SUMMER;
else if(month==8||month==9||month==10)
return AUTUMN;
else
return WINTER;
}
void doSelect(Season season){
if(season==SPRING)
printf("现在是春天,郊游");
else if(season==SUMMER)
printf("现在是夏天,避暑");
else if(season==AUTUMN)
printf("现在是秋天,骑马");
else
printf("现在是冬天,吃火锅");
}
如果你对某个变量的值很感兴趣,考虑使用枚举做标记
如果你想表达选择方案,使用枚举