白话编程---数据篇(4)枚举

前言

        枚举是一种常用的自定义数据类型,可以用于标记,选择,提高程序可读性.

引入 

        曾经看见过有趣的事情,程序员最大的难题是什么?"给函数命名"位列榜首,占了50%以上的比例.还经常有人抱怨说自己前不久写的代码自己都不认识了得从头捋.我不想去评论专业程度或者敬业精神,但侧面反映出注释的重要性.

        一个好的程序,是需要别人快速看懂理解,和易于维护的.在一定程度上决定了代码质量.

        那么在一段程序中,获取状态同样重要,我们需要调用一个程序来提取当前某个状态值,且这个状态值是很容易理解的符号---比如说一个单词,而非赤裸的数值.这也是枚举设计的初衷.

枚举的格式

        以颜色为例,建立一个枚举类型

        typedef enum Color{RED,GREEN,BLUE}Color;                //以三原色为例.

        枚举定义格式: typedef + enum + 枚举类型名 + {枚举值1,枚举值2...........}枚举类型名+分号

枚举分析

        1>枚举是一种自定义数据类型,枚举值一般用大写符号常量表示

        2>枚举值可以有数值表示,如可以写成{RED=0,GREEN=1,BLUE=2} ,但不推荐使用

                说明:为什么不推荐数值?因为合理的函数设计可以不用.

        3>枚举有变量,但不能用指针指向枚举变量.

               某数据类型变量定义: 类型名 变量名= 值;                      //复习数据的定义.

               某数据类型指针定义: 类型名 * 指针变量 =&变量名       //数据指针定义,枚举无此定义

                枚举属于自定义数据类型,使用时必然有变量. 但是没有给其设计指针  //规则,记住即可

枚举使用

        1>状态标记

          说明:某变量的值,必属于几个状态中的一个状态,可以使用枚举来标记.

           举例: 假如把月份分类--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;
}

                看到这里,您可能会问,这个函数干了什么,不就是给变量改了个名吗?

                是的,您的看法很正确.但不可否认,如果程序员面对的数据很多,有时候还是挺好用的.

        2>自定义选择方案

                说明:当需要表达某种情况下做某些事,可以使用枚举.

                举例:春天郊游,夏天避暑,秋天骑马,冬天吃火锅.

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("现在是冬天,吃火锅");
}

        白话枚举意义

        如果你对某个变量的值很感兴趣,考虑使用枚举做标记

        如果你想表达选择方案,使用枚举

你可能感兴趣的:(c,c++)