C enum(枚举)

简介: C enum(枚举)

C enum(枚举)

枚举是 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
};

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

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

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

枚举变量的定义

前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。

我们可以通过以下三种方式来定义枚举变量

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

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("%d",day);
    return 0;
}

结果:

以上实例输出结果为:

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

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

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

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

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

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

枚举在 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;
}

以上实例输出结果为:

请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1
你喜欢的颜色是红色

将整数转换为枚举

以下实例将整数转换为枚举:

举例:

#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;
}

以上实例输出结果为:

weekend:1
相关文章
|
搜索推荐 JavaScript 前端开发
77 网站点击流数据分析案例(原理及意义)
77 网站点击流数据分析案例(原理及意义)
964 0
|
4月前
|
云安全 存储 安全
关于云安全的解读
云安全旨在保护云端数据、应用及基础设施,涵盖技术、策略与控制措施,防范数据泄露与网络威胁。作为网络安全的重要分支,它遵循“共享责任模型”,强调用户与云服务商共同担责。其核心目标是降低风险、保障合规,并应对如攻击面扩大、权限管理复杂、多云环境挑战等关键问题。通过零信任架构、身份与访问管理(IAM)、云工作负载保护(CWPP)及配置安全态势管理(CSPM)等手段,实现对云环境的全面防护。随着企业加速上云,云安全已成为保障业务连续性与数据安全的关键防线。
590 87
|
5月前
|
人工智能 前端开发 数据可视化
开发者为什么要选择低代码平台?附低代码工具选型与实施指南
本文为开发者详解低代码平台的选择与实施,涵盖选型要点、主流工具推荐及策略指导。首先分析为何选择低代码平台,适合需求多变、时间紧张或预算有限的项目。接着从业务、技术、用户三大需求维度,结合功能灵活性、可扩展性等5大评估点,提供科学选型方法。盘点了织信Informat、OutSystems等十大热门平台,满足不同场景需求。实施阶段强调培训、渐进部署与数据治理,同时提醒避免过度依赖供应商、忽视体验等常见陷阱。助开发者高效低成本达成目标。
|
缓存
数据结构之 - 链表数据结构详解: 从基础到实现
数据结构之 - 链表数据结构详解: 从基础到实现
548 6
|
9月前
|
UED
产品经理-用户体验五要素 - AxureMost
《用户体验五要素》介绍了构建成功用户体验设计的五个层面:战略层、范围层、结构层、框架层和表现层。战略层明确产品目标与用户需求;范围层定义功能和内容需求;结构层规划交互与信息架构;框架层设计界面、导航和信息布局;表现层则通过视觉设计创造感知体验。每一层都依赖于其下一层,形成自下而上的连锁效应,确保各要素相互作用,共同实现用户体验目标。
|
物联网 大数据 定位技术
基于RFID、室内定位技术的图书馆定位系统功能解析
维小帮图书馆定位导航系统解决了复杂布局与找书难题,采用RFID、室内定位技术,结合大数据与云计算,提供电子地图、VR云览、AR导航及图书位置指引。通过集成座位预约,优化资源分配,提升读者体验,促进图书馆与城市的智慧化建设。
593 3
基于RFID、室内定位技术的图书馆定位系统功能解析
|
机器学习/深度学习 Ubuntu KVM
ubuntu启动emulator : /dev/kvm is not found: VT disabled in BIOS or KVM kernel module not loaded
本文记录了解决AOSP模拟器无法启动的问题,原因是微星B450M主板BIOS中虚拟化技术未开启,通过安装KVM模块并修改BIOS设置以启用SVM模式来解决。
604 0
ubuntu启动emulator : /dev/kvm is not found: VT disabled in BIOS or KVM kernel module not loaded
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
量子计算作为革命性的计算范式,凭借量子比特和量子门的独特优势,展现出在大数据处理中的巨大潜力。本文探讨了量子计算的基本原理、在大数据处理中的应用及面临的挑战与前景,展望了其在金融、医疗和物流等领域的广泛应用。
|
传感器 人机交互 vr&ar
VR技术的基本原理与发展历程:探索虚拟现实的无限可能
【8月更文挑战第24天】VR技术作为一项具有广阔前景和巨大潜力的技术,正在不断改变着我们的世界。让我们共同期待VR技术在未来的更多精彩表现吧!
3680 2
|
存储 Java
【数据结构】优先级队列(堆)从实现到应用详解
本文介绍了优先级队列的概念及其底层数据结构——堆。优先级队列根据元素的优先级而非插入顺序进行出队操作。JDK1.8中的`PriorityQueue`使用堆实现,堆分为大根堆和小根堆。大根堆中每个节点的值都不小于其子节点的值,小根堆则相反。文章详细讲解了如何通过数组模拟实现堆,并提供了创建、插入、删除以及获取堆顶元素的具体步骤。此外,还介绍了堆排序及解决Top K问题的应用,并展示了Java中`PriorityQueue`的基本用法和注意事项。
324 5
【数据结构】优先级队列(堆)从实现到应用详解