C语言菜鸟入门·枚举类型·enum的使用详解

目录

1.  简介

2.  初始化

2.1  默认

2.2  手动指定

2.2.1  全部指定

2.2.2  部分指定

2.2.3  重复指定

3.  枚举变量的定义

3.1  先定义枚举类型,再定义枚举变量

3.2  定义枚举类型的同时定义枚举变量

3.3  省略枚举名称,直接定义枚举变量

4.  枚举对象赋值问题

4.1  枚举量赋给非枚举变量

4.2  非枚举量赋给枚举变量

5.  运用

5.1  使用 for 来遍历枚举的元素

5.2  在 switch 中的使用


1.  简介

        枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。

        枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。

        定义一个枚举类型,需要使用 enum 关键字,后面跟着枚举类型的名称,以及用大括号 {} 括起来的一组枚举常量。每个枚举常量可以用一个标识符来表示,也可以为它们指定一个整数值,如果没有指定,那么默认从 0 开始递增。

枚举语法定义格式为:

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

        举个例子:比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:

#define MON  1
#define TUE  2
#define WED  3
#define THU  4
#define FRI  5
#define SAT  6
#define SUN  7

        这个看起来代码量就比较多,接下来我们看看使用枚举的方式:

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

        这样看起来是不是更简洁了。

2.  初始化

        在上面的例子中,我们可以看到魔门指定了MON=1,实际上第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

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

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

        没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5,下面我们来分别举例看一下:

2.1  默认

#include <stdio.h>

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

int main()
{
    // 输出所有枚举成员的值
    printf("MON = %d\n", MON);
    printf("TUE = %d\n", TUE);
    printf("WED = %d\n", WED);
    printf("THU = %d\n", THU);
    printf("FRI = %d\n", FRI);
    printf("SAT = %d\n", SAT);
    printf("SUN = %d\n", SUN);

    return 0;
}

输出结果:

2.2  手动指定

2.2.1  全部指定

#include <stdio.h>

enum DAY
{
    MON=9, 
    TUE=8, 
    WED=7, 
    THU=6, 
    FRI=5, 
    SAT=4, 
    SUN=3
};
enum DAY day;

int main()
{
    // 输出所有枚举成员的值
    printf("MON = %d\n", MON);
    printf("TUE = %d\n", TUE);
    printf("WED = %d\n", WED);
    printf("THU = %d\n", THU);
    printf("FRI = %d\n", FRI);
    printf("SAT = %d\n", SAT);
    printf("SUN = %d\n", SUN);

    return 0;
}

输出结果:

2.2.2  部分指定

#include <stdio.h>

enum DAY
{
    MON=9, 
    TUE, 
    WED, 
    THU, 
    FRI=5, 
    SAT, 
    SUN
};
enum DAY day;

int main()
{
    // 输出所有枚举成员的值
    printf("MON = %d\n", MON);
    printf("TUE = %d\n", TUE);
    printf("WED = %d\n", WED);
    printf("THU = %d\n", THU);
    printf("FRI = %d\n", FRI);
    printf("SAT = %d\n", SAT);
    printf("SUN = %d\n", SUN);

    return 0;
}

输出结果:

2.2.3  重复指定

#include <stdio.h>

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

int main()
{
    // 输出所有枚举成员的值
    printf("MON = %d\n", MON);
    printf("TUE = %d\n", TUE);
    printf("WED = %d\n", WED);
    printf("THU = %d\n", THU);
    printf("FRI = %d\n", FRI);
    printf("SAT = %d\n", SAT);
    printf("SUN = %d\n", SUN);

    return 0;
}

输出结果:

3.  枚举变量的定义

3.1  先定义枚举类型,再定义枚举变量

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

举例:

#include <stdio.h>

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

int main()
{
    enum DAY day;
    day = WED;
    printf("%d", day);
    return 0;
}

3.2  定义枚举类型的同时定义枚举变量

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

举例:

#include <stdio.h>

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

int main()
{
    enum DAY day;
    day = WED;
    printf("%d", day);
    return 0;
}

3.3  省略枚举名称,直接定义枚举变量

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

举例:

#include <stdio.h>

enum
{
    MON = 1, TUE, WED, THU, FRI, SAT, SUN
} day;  // 定义枚举类型并同时声明变量 day

int main()
{
    day = WED;  // 将 day 设置为 WED
    printf("%d", day);  // 输出枚举值,WED 对应的值是 3
    return 0;
}

4.  枚举对象赋值问题

4.1  枚举量赋给非枚举变量

        枚举成员本身是整数常量,编译器会将它们视作 int 类型。因此,可以将枚举量赋给非枚举变量(例如 int 类型的变量),因为编译器会自动将枚举值转换为整数类型。

#include <stdio.h>

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

int main()
{
    int day = WED;  // 枚举量 WED 被赋值给 int 变量 day
    printf("day = %d\n", day);  // 输出 WED 的值,即 2
    return 0;
}

运行结果:

4.2  非枚举量赋给枚举变量

        你不能将普通的整数值直接赋给枚举变量。虽然枚举变量背后实际存储的是整数值,但它是一个类型安全的枚举类型,编译器会根据枚举定义进行类型检查。所以,不能直接把一个非枚举量的整数赋值给一个枚举变量,除非这个整数确实对应于枚举的某个成员。

#include <stdio.h>

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

int main()
{
    enum { MON, TUE, WED, THU, FRI, SAT, SUN } day;
    day = 2;  // 错误:尝试将普通的整数值 2 直接赋给枚举类型变量
    printf("day = %d\n", day);
    return 0;
}

输出结果:

        可以从下面的报错提示看出无法从int转换为......。

5.  运用

5.1  使用 for 来遍历枚举的元素

#include <stdio.h>

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

int main()
{
    // 遍历枚举元素,直接使用整数值
    for (int day = MON; day <= SUN; day++) {
        printf("枚举元素:%d \n", day);
    }

    return 0;
}

运行结果(这里换了一下编译器,之前用的C++的编译器,其中++会报错):

5.2  在 switch 中的使用

#include <stdio.h>
#include <stdlib.h>
int main()
{
 
    enum color { red=1, green, blue };
 
    enum  color favorite_color;
 
    /* 用户输入数字来选择颜色 */
    printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
    scanf("%u", &favorite_color);
 
    /* 输出结果 */
    switch (favorite_color)
    {
    case red:
        printf("你喜欢的颜色是红色");
        break;
    case green:
        printf("你喜欢的颜色是绿色");
        break;
    case blue:
        printf("你喜欢的颜色是蓝色");
        break;
    default:
        printf("你没有选择你喜欢的颜色");
    }
 
    return 0;
}

运行结果:

C语言_时光の尘的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光の尘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值