15. 枚举

一、什么是枚举变量

  枚举是 C 语言中的一种数据类型,它可以让数据更简洁,更易读,对于只有几个有限的特定类型,可以使用枚举。枚举是一组常量的集合,包含一组有限的特定的数据。

二、枚举类型的定义

  在 C 语言中,我们可以使用 enum 关键字声明枚举类型变量。一个枚举变量包含一组相关的标识符,其中每个标识符都对应一个整数值,称为 枚举常量。它的定义格式如下:

enum 枚举类型名
{
    标识符1[=值1],
    标识符2[=值2],
    标识符3[=值3],
    ...
    标识符n[=值n]
};

  在定义枚举类型的变量时,可以为某个特定的标识符指定对应的整数值,紧随其后的标识符对应的值依次加 1。如果没有为枚举变量显示的指定整数值,默认从 0 开始,依次递增。如果为枚举变量中间的某个标识符指定对应的值,那么它之前的标识符对应的整数值从 0 开始,它后面的标识符对应的整数值从该值开始依次加 1。

一个枚举变量包含一组相关的标识符,其中每个标识符都对应一个整数值,称为枚举常量;

每个标识符都必须是唯一的,而且不能采用关键字或当前作用域内其它相同的标识符;

三、枚举变量的定义

【1】、声明枚举类型,再定义变量

enum 枚举类型名 变量名;

【2】、在声明枚举类型时定义变量

enum 枚举类型名
{
    标识符1[=值1],
    标识符2[=值2],
    标识符3[=值3],
    ...
    标识符n[=值n]
}变量名1, 变量名2, ..., 变量名n;

定义的变量不是只能有一个,可以定义多个变量;

【3】、直接定义枚举类型变量

 如果我们只需要确定个数的枚举变量,后面不需要再使用枚举类型定义变量,我们可以在定义时不给出枚举类型名。

enum
{
    标识符1[=值1],
    标识符2[=值2],
    标识符3[=值3],
    ...
    标识符n[=值n]
}变量名1, 变量名2, ..., 变量名n;

四、枚举变量的赋值

【1】、先声明变量再对变量赋值

enum 枚举类型名 变量名;
变量名 = 枚举常量;

【2】、声明变量的同时赋初值

enum 枚举类型名 变量名 = 枚举常量;

【3】、定义类型的同时声明变量,然后对变量赋值

enum 枚举类型名
{
    标识符1[=值1],
    标识符2[=值2],
    标识符3[=值3],
    ...
    标识符n[=值n]
}变量名;

变量名 = 枚举常量;

【4】、类型定义,变量声明,赋初值同时进行

enum 枚举类型名
{
    标识符1[=值1],
    标识符2[=值2],
    标识符3[=值3],
    ...
    标识符n[=值n]
}变量名 = 枚举常量;

枚举变量的取值范围是固定的,只可以再枚举常量中选择;

对枚举型的变量赋整数值时,需要进行类型转换 ,即 变量名 = (enum 枚举类型名)整数值

五、枚举的优点

  我们可以用 #define 定义宏常量,那么我们为什么要使用枚举呢?这是因为,枚举具有以下优点:

  1. 枚举可以增加代码的可读性和可维护性;
  2. 和 #define 定义的标识符相比,枚举变量有类型检查,更加严谨;
  3. 枚举防止了命名污染;
  4. 使用枚举变量便于调试;
  5. 枚举使用方便,一次可以定义多个常量;

六、枚举的使用

  枚举类型只能在内部使用,如果要输入枚举变量中的某个枚举值,只能输入它对应的整数值,不能输入它的标识符。因为枚举类型是整数类型,所以可以在表达式中使用整数变量的方式来使用 enum 变量,它们用在 case 中很方便。

#include <stdio.h>

enum WEEK
{
    MONDAY = 1,
    THESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

int main(void)
{
    int day = 0;

    printf("请输入一个星期:");
    scanf("%d",&day);

    switch(day)
    {
    case MONDAY:
        printf("你输入的是星期一\n");
        printf("%d\n",MONDAY);
        break;
    case THESDAY:
        printf("你输入的是星期二\n");
        printf("%d\n",THESDAY);
        break;
    case WEDNESDAY:
        printf("你输入的是星期三\n");
        printf("%d\n",WEDNESDAY);
        break;
    case THURSDAY:
        printf("你输入的是星期四\n");
        printf("%d\n",THURSDAY);
        break;
    case FRIDAY:
        printf("你输入的是星期五\n");
        printf("%d\n",FRIDAY);
        break;
    case SATURDAY:
        printf("你输入的是星期六\n");
        printf("%d\n",SATURDAY);
        break;
    case SUNDAY:
        printf("你输入的是星期七\n");
        printf("%d\n",SUNDAY);
        break;
    default:
        printf("你输入有误\n");
        break;
    }

    return 0;
}
posted @ 2023-03-13 12:21  星光樱梦  阅读(190)  评论(0编辑  收藏  举报