C语言自定义类型:枚举

目录

  • 前言
  • 枚举类型
    • 1.枚举类型的声明
    • 2.枚举类型的优点
    • 3.枚举类型的使⽤
  • 总结


前言

这期我们来学习C语言的最后一个自定义类型——枚举,话不多说,正文开始:


枚举类型

1.枚举类型的声明

枚举顾名思义就是⼀⼀列举。
把可能的取值⼀⼀列举。

⽐如我们现实⽣活中:

⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举
性别有:男、⼥、保密,也可以⼀⼀列举
⽉份有12个⽉,也可以⼀⼀列举
三原⾊,也是可以意义列举

这些数据的表⽰就可以使⽤枚举了。

枚举关键字:enum

enum Color
{//三原色的可能取值RED,GREEN,BLUE
};enum Sex
{MALE,FEMALE,SECREL
};

以上定义的 enum Sex , enum Color 都是枚举类型
{}中的内容是枚举类型的可能取值,也叫 枚举常量

既然是常量我们就不能修改:
在这里插入图片描述

如果我们将其打印会默认是0-2:

enum Color
{//三原色的可能取值RED,GREEN,BLUE
};
int main()
{/*enum Color color = RED;*/printf("%d\n", RED);printf("%d\n", GREEN);printf("%d\n", BLUE);return 0;
}

在这里插入图片描述
我们也可以在定义的时候修改这个默认值:

enum Color
{//三原色的可能取值RED = 4,GREEN = 6,BLUE= 8
};int main()
{/*enum Color color = RED;*/printf("%d\n", RED);printf("%d\n", GREEN);printf("%d\n", BLUE);return 0;
}

运行结果:
在这里插入图片描述

如果我们修改部分值,打印的会是什么值?

enum Color
{//三原色的可能取值RED,GREEN = 6,BLUE
};int main()
{/*enum Color color = RED;*/printf("%d\n", RED);printf("%d\n", GREEN);printf("%d\n", BLUE);return 0;
}

运行结果:
在这里插入图片描述
综上所诉,也就是将可能的值统一放一起,然后有个常量可以代表他:

那是不是和我们之前学的#define有点相似了,两者的区别在哪?我们往后看;

2.枚举类型的优点

为什么使⽤枚举?

我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?

枚举的优点:

  1. 增加代码的可读性和可维护性

我们来举一个我们之前做的计算器的菜单例子:

void menu()
{printf("****************************************\n");printf("*********1.add  *******  2.sub  ********\n");printf("*********3.mul  *******  4.div  ********\n");printf("*********0.exit    *********************\n");printf("****************************************\n");
}int main()
{int input = 0;scanf("%d", &input);switch (input){case 1:break;case 2:break;case 3:break;case 4:break;default:break;}
}

有了枚举后我们可以直接这样写:

enum option
{EXIT,  //0ADD,  //1SUB,  //2MUL,  //3DIV  //4
};void menu()
{printf("****************************************\n");printf("*********1.add  *******  2.sub  ********\n");printf("*********3.mul  *******  4.div  ********\n");printf("*********0.exit    *********************\n");printf("****************************************\n");
}int main()
{int input = 0;scanf("%d", &input);switch (input){case ADD:break;case SUB:break;case MUL:break;case DIV:break;default:break;}
}

大大提高了我们对代码的可读性和可维护性;

  1. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。

我们这里用c语言和c++做个对比:

在这里插入图片描述
在这里插入图片描述

  1. 便于调试,预处理阶段会删除 #define 定义的符号

在预处理的时候就已经将所有的define定义的符号就替换成了值

  1. 使⽤⽅便,⼀次可以定义多个常量

这个在刚刚的例子大有提现;

  1. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

3.枚举类型的使⽤

enum Color//颜⾊
{RED=1,GREEN=2,BLUE=4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值

那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。(上面的优点的第二点已体现出来)


总结

这就是C语言中的枚举,理解起来较为简单,主要让大家在今后的过程中看的懂代码;下期见。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1550266.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

外资在华 | 这家欧洲医疗诊断龙头如何用纷享销客CRM深耕中国市场

该公司的起源可以追溯到19世纪末的欧洲,是全球体外诊断领域的领军企业之一。 目前该公司经营产品超过2000余种,在全球细菌学市场占据领先地位,市场占有率超过20%,是全球TOP5级别的感染性疾病诊断厂家,占全球超10%的市…

GPG error golang 1.19

1. 问题描述及原因分析 在飞腾2000的服务器,OS为Kylin Linux Advanced Server release V10环境下,docker版本为18.09.0(docker-engine-18.09.0-101.ky10.aarch64),基于容器镜像golang:1.19编译新的容器镜像&#xff0…

第二百五十九节 JPA教程 - JPA查询选择两个属性示例

JPA教程 - JPA查询选择两个属性示例 从别名开始,我们可以使用点(.)运算符浏览实体关系。 以下JPQL从一个实体中选择两个属性。 List l em.createQuery("SELECT e.name, e.salary FROM Professor e")例子 下面的代码来自PersonDa…

四川财谷通信息技术有限公司抖音小店领域的强势力量

在数字化浪潮汹涌的今天,电商行业以其独特的魅力和无限潜力,成为了推动经济发展的重要力量。而在这片充满机遇与挑战的电商蓝海中,四川财谷通信息技术有限公司凭借其敏锐的市场洞察、创新的技术实力以及优质的服务品质,迅速崛起为…

无人机在农业方面的应用!

一、提高农业生产效率 通过搭载农业智能传感器和喷洒设备,可以实现对农田的精准施肥和喷药。这种方式不仅减少了农药和化肥的浪费,还降低了对环境的污染,提高了农业生产效率。 无人机利用热、多光谱和高光谱技术,可以高效、准确…

低代码统一代办系统:提升工作效率的新利器

什么是低代码统一代办系统? 低代码统一代办系统是通过低代码开发平台构建的一种工具,用于集中管理和跟踪团队成员的任务和待办事项。该系统具有可视化设计、模块化组件和灵活性,能够快速适应不同团队和项目的需求,提高工作效率。…

海滨体育馆管理:SpringBoot系统设计与实现

1引言 1.1课题背景 当今时代是飞速发展的信息时代。在各行各业中离不开信息处理,这正是计算机被广泛应用于信息管理系统的环境。计算机的最大好处在于利用它能够进行信息管理。使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其…

关于没有启用root问题,分区表挂载错误,导致系统无法启动

1、为啥这样设置,root 2、密码破解也无效 2.1、开机启动,按 e 进入启动文件界面 2.2、把ro修改为rw,注意r和o之间包了个反斜杠 2.3、ctrl x退出当前模式 2.4、rw initsysroot/bin/sh 2.5、chroot /sysroot 2.6、然后输入touch /.autorelabe…

数字人直播屡次违规真相曝光!有哪些技术可以有效解决?

随着数字人直播的应用频率不断升高,其所蕴含着的市场需求和收益潜力日渐显现,让其用户规模得以持续扩大的同时,也让不少创业者都有了找数字人源码厂商搭建数字人直播系统的计划。在此背景下,与数字人直播违规吗相关的各类话题和答…

【Python报错已解决】NameError: name ‘time‘ is not defined

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 专栏介绍 在软件开发和日常使用中,BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

Shopline对接需要注意的问题

Shopline对接是一项复杂而细致的工作,为了确保对接的顺利进行,并保证系统的稳定性和可靠性,需要注意以下几个方面。 1.API文档的详细阅读 功能理解: 仔细阅读Shopline提供的API文档,全面了解每个接口的功能、参数、返…

T536 工业级设备处理器:为智能硬件与工业应用打造的高性能解决方案

T536 工业级设备处理器:为智能硬件与工业应用打造的高性能解决方案 引言 在当今快速发展的科技时代,工业自动化和智能硬件领域对处理器的需求日益增长。为了满足这一需求,Allwinner Technology推出了T536系列处理器,这是一款专为…

kafka发送消费核心参数与设计原理详解

核心参数详解: 发送端参数: 发送方式:默认值一般都是1: 重试参数 : 批量参数: 消费端参数: 自动提交参数: 如果是false,就是说消费完后不提交位移。也就是说比如之前消费的1-5.第N次还是消费到1-5.如果是false。那么第一次消费1-3,第二次消费4-5:默认是true:我们…

State-实时监测Mac运行状态,为你的Mac保驾护航!

你有没有遇到过这样的情况:当你的电脑突然变得非常慢,或者应用程序崩溃,你却无法确定是什么原因导致的呢? 这时候,一个可以实时监测电脑运行状态的软件就显得尤为重要。它可以帮助我们获取电脑的运行数据,让…

使用WPF实现一个快速切换JDK版本的客户端工具

发现网上一键切换JDK环境的方法都是在mac或Linux下的,本人主力电脑是Windows,于是看了一下WPF的文档,自己开发了一个客户端。 直接上代码吧: using JavaSwitch.Properties; using Newtonsoft.Json; using System; using System.…

3种方法解决Docker容器中配置运行环境问题

1. dockerfile用于通过脚本生成镜像 2.进入docker容器后,配置环境完,导出容器快照为镜像,拷贝到另一个主机,再进行加载; 3.在本地将依赖库等需要的文件按照目录整理好,映射到docker中。 1. dockerfile用于…

系统架构设计师-知识产权与标准化

目录 一、保护范围与对象 二、保护期限 三、知识产权人确定 四、侵权判断 五、标准化 一、保护范围与对象 知识产权是权利人依法就下列课题享有的专有权利: (一)作品(著作) (二)发明、实用…

用实力说话!望繁信科技与创鑫激光达成战略合作

2023年 ,国内激光器龙头企业创鑫激光与望繁信科技正式签署战略合作协议。双方将在流程智能平台应用、流程梳理与数据分析等业务领域展开深度合作,携手共赴广阔未来! 此次战略合作协议的签订,不仅标志着双方合作关系的进一步巩固和…

PHP 异步编程:从入门到精通

异步编程简介 异步编程是一种允许程序在等待某些操作(如I/O操作或长时间运行的任务)完成时继续执行其他任务的编程模式。这种方式可以显著提高应用程序的效率,尤其是在处理高延迟操作时。 PHP异步编程的实现 在PHP中,实现异步编…

鸿蒙开发:民族之光的崛起

在科技飞速发展的今天,操作系统的选择直接影响到我们的生活和工作方式。鸿蒙操作系统的出现,不仅代表了技术的进步,更是中国科技实力的象征,承载着“民族之光”的使命。 一、鸿蒙操作系统的背景 鸿蒙操作系统(Harmony…