What

是一种构造数据类型
是一组常量的集合,包含一组有限的限定的数据
是一个被命名的整型常数的集合

Why

  1. 如果需要通过用户输入的数字来判断执行对应的逻辑语句,就会用到switch,在C语言中switch的expression 必须是常量表达式或枚举类型,子句中的值也必须是常量,那么常量表达式不能非常直观的看出这是什么,所以就可以用到枚举,因为枚举的元素也只能是整型。
  2. 比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:
    1. #define MON
    2. #define TUE
    3. #define WED
    4. #define THU
    5. #define FRI
    6. #define SAT
    7. #define SUN
    8. //这个看起来代码量就比较多,接下来我们看看使用枚举的方式:
    9. enum DAY
    10. {
    11. MON=1, TUE, WED, THU, FRI, SAT, SUN
    12. };

    How

    通过enum关键字

    枚举变量

    通过枚举构造出来的变量,只能取枚举结构中的其中一个标识符常量。
    1. void main()
    2. {
    3. enum Day //Day 就是枚举类型
    4. {
    5. MON = 1,
    6. Tue = 2,
    7. Wed = 3,
    8. Thu = 4,
    9. Fri = 5,
    10. Sat = 6,
    11. Sun = 7
    12. };
    13. enum Day day;//enum Day是枚举数据类型 day是枚举变量
    14. day = Sat;//提取day中的Sat
    15. printf("%d", day);
    16. getchar();
    17. }

    在switch中的应用

    1. enum SEASONS
    2. {
    3. SPRING = 1,
    4. SUMMER,
    5. AUTUMN,
    6. WINTER
    7. } season;
    8. printf("输入你喜欢的季节:(1.srping,2.summer,3.autumn,4.winter");
    9. scanf("%d", &season);
    10. switch (season)
    11. {
    12. case SPRING:
    13. printf("你喜欢春天");
    14. break;
    15. case SUMMER:
    16. printf("你喜欢夏天");
    17. break;
    18. case AUTUMN:
    19. printf("你喜欢秋天");
    20. break;
    21. case WINTER:
    22. printf("你喜欢冬天");
    23. break;
    24. default:
    25. printf("你为什么不选");
    26. }
    27. fflush(stdin);
    28. getchar();
    29. }

    遍历枚举

    如果枚举没有初始化,即省掉”=整型常数”时, 则从第一个标识符开始,顺次赋给标识符0, 1, 2, …。
    但当枚举中的某个成员赋值后,其后的成员按依次加1的规则确定其值。
    1. enum Day
    2. {
    3. Mon = 1,Tue,Wed,Thu,Fri,Sat,Sun
    4. }day;
    5. for (day = Mon; day <= Sun; day++){
    6. printf("%d",day);
    7. }
    8. getchar();