C 语言编程 — 高级数据类型 — 枚举

泪湿孤枕 提交于 2020-04-06 14:56:02

目录

前文列表

程序编译流程与 GCC 编译器
C 语言编程 — 基本语法
C 语言编程 — 基本数据类型
C 语言编程 — 变量与常量
C 语言编程 — 运算符
C 语言编程 — 逻辑控制语句
C 语言编程 — 函数
C 语言编程 — 高级数据类型 — 指针
C 语言编程 — 高级数据类型 — 数组







声明枚举类型

枚举也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量。

与 int、float 等内置的数据类型不同,枚举类型是一种需要程序员自定义的数据类型。也就是说程序员需要先声明一个枚举类型,告诉编译器它具有哪些元素,然后才能够被定义一个枚举类型的变量。

enum 枚举名 {枚举元素1,枚举元素2,……};

e.g.

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};

默认情况下,第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1,以此类推。如上例,如果我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

定义枚举类型的变量

  • 先定义枚举类型,再定义枚举变量
// 声明枚举类型
enum DAY{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
};

// 定义枚举类型变量
enum DAY day;
  • 定义枚举类型的同时定义枚举变量
enum DAY{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
  • 省略枚举名称,直接定义枚举类型的同时定义枚举变量
enum{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

示例:

#include <stdio.h>

/* 声明了一个枚举类型 */
enum DAY{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
};


int main(){
    /* 定义一个枚举类型变量 */
    enum DAY day;
    
    /* 枚举类型变量使用枚举值 */
    day = WED;
    
    printf("Day num is %d", day);
    return 0;
}

我们也可以在定义枚举类型时改变枚举元素的值:

enum season {spring, summer=3, autumn, winter};

没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5。

变量枚举类型变量的枚举值

C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的(因为不是数组类型)。

不过在一些特殊的情况下,枚举类型是可以实现有条件的遍历的:

#include <stdio.h>

enum DAY{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
};

int main(){
    int i;

    for(i = MON; i < SUN; i++){
        printf("Day is %d\n", i);
    }
    return 0;
}

上述例子可见,枚举类型中的枚举值实际上就是一个整型,即便没有定义枚举类型的变量,编译器也会自动的将枚举元素替换为枚举值,并且当枚举值是顺序递增的时候就可以被循环。相反,则不行:

enum{
    ENUM_0,
    ENUM_10 = 10,
    ENUM_11
};

枚举在 switch 语句中的使用

#include <stdio.h>
#include <stdlib.h>

int main()
{
    enum color { red=1, green, blue };
    enum color favorite_color;
 
    /* ask user to choose color */
    printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
    scanf("%d", &favorite_color);
 
    /* 输出结果 */
    switch (favorite_color)
    {
    case red:
        printf("你喜欢的颜色是红色");
        break;
    case green:
        printf("你喜欢的颜色是绿色");
        break;
    case blue:
        printf("你喜欢的颜色是蓝色");
        break;
    default:
        printf("你没有选择你喜欢的颜色");
    }
    return 0;
}

将整型转换为枚举类型

#include <stdio.h>
#include <stdlib.h>
 
int main()
{
 
    enum day
    {
        saturday,
        sunday,
        monday,
        tuesday,
        wednesday,
        thursday,
        friday
    } workday;
 
    int a = 1;
    enum day weekend;
    weekend = ( enum day ) a;  //类型转换
    //weekend = a; //错误
    printf("weekend:%d",weekend);
    return 0;
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!