C语言自定义类型变量——枚举(enum)

一.枚举的定义和声明

字面意思,枚举就是一一列举,把可能的取值一一列举,在我们现实生活中有许多可以列举的事物,例如:一周七天,一年四季,性别,月份,三原色等等。当我们需要描述这些数据的时候就可以使用枚举了。其关键字为eunm.

类似于结构体,联合体,定义一个枚举类型的基本形式如下:

enum 枚举名

{

        枚举常量1,

        枚举常量2,

        //...

        枚举常量n
};

 例如:枚举一星期七天

enum Day//星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

以上定义的 enum Day 就是一种枚举类型。 { }中的内容是枚举类型的可能取值,也叫枚举常量 。这些可能取值都是有值的,默认从0开始,依次递增1,当然在声明枚举类型的时候也是可以赋初值的。(后面的值也是顺次加1的)

enum Color
{
	RED,//0
	GREEN,//1
	BLUE//2
};
	
int main()
{
	//enum Color cl = RED;
	//RED=5//err
	printf("%d\n", RED);
	printf("%d\n", GREEN);
	printf("%d\n", BLUE);
	return 0;
}

注意:对于enum中的枚举常量在使用的时候是不可以再次赋值的,因为它是一个常量值 ,只能在初始化的时候修改默认值。

二.枚举类型的优点

通过枚举的定义我们会发现它与#define效果很类似,那我们为什么非要使用枚举?

枚举的优点:

#define相对来说更加简单粗暴,就是将所有的符号替换为设定值,并且作用域是全局的,而对于枚举变量中的枚举常量,编译器会将它视作一种变量类型,更加严谨,并且只能在函数内部使用,作用范围更精确。我简单举两个案例直观感受一下enum的好处与用途:

eg1:枚举的类型检查

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

eg2: 枚举的可读性

下面是一个简易计算器实现,其中使用enum会将数字替换成名称,增加代码可读性,更加直观。

void menu()
{
	printf("**************************************");
	printf("******1.Add      2.Sub****************");
	printf("******3.Mul      4.Div****************");
	printf("***********0.Exit*********************");
	printf("**************************************");
}

eunm
{
	Exit,//0
	Add,//1
	Sub,//2
	Mul,//3
	Div//4
}
int main()
{
	int input = 0;
	printf("请输入->");
	scanf("%d", &input);
	switch (input)
	{
	case Add://1
			//Add();
			break;
	case Sub://2
			//Sub();
			break;
	case Mul://3
			//Mul();
			break;
	case Div://4
			//Dix();
			break;
	case Exit://0
			//Exit()
			break;
	default:
				break;
	}
	return 0;
}

eg3:枚举一次性定义多个变量,相较于#define更加简洁明了。

enum Color
{
	RED=,//0
	GREEN,//1
	BLUE//2
};

#define RED 0
#define GREEN 0
#define BLUE 0

以上便是对C语言自定义类型变量的最后一种——枚举的简要介绍,望屏幕前的你能有所收获! 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SpringCloud】Nacos 注册中心

目 录 一.认识和安装 Nacos1.Windows安装1. 下载安装包2. 解压3. 端口配置4. 启动5. 访问 2.Linux安装1. 安装JDK2. 上传安装包3. 解压4. 端口配置5. 启动 二.服务注册到 nacos1. 引入依赖2. 配置 nacos 地址3. 重启 三.服务分级存储模型1. 给 user-service 配置集群2. 同集群优…

Spring Boot-01-通过一个项目快速入门

官方参考文档:Spring Boot Reference Documentation 0. 概述 Spring的缺点: 1. 配置繁琐:虽然Spring的组件代码是轻量级,但它的配置却是重量级的。 2. 依赖繁琐:项目的依赖管理也是一件耗时耗力的事情。分析要导入哪…

在单交换机局域网中,不同网段的主机通信探秘

在理解局域网中不同网段主机之间的通信之前,我们首先要明白网络的基本组成和工作原理。局域网(LAN)是一个封闭的网络环境,通常由交换机(Switch)作为核心设备连接网络中的各个主机。当我们谈论不同网段的主机…

C语言 | Leetcode C语言题解之第13题罗马数字转整数

题解: 题解: int romanToInt(char* s) {int symbolValues[26];symbolValues[I - A] 1;symbolValues[V - A] 5;symbolValues[X - A] 10;symbolValues[L - A] 50;symbolValues[C - A] 100;symbolValues[D - A] 500;symbolValues[M - A] 1000;int a…

天龙八部_暗黑机制_人面桃花_单机架设搭建

一. 搭建成功视频演示 天龙八部_暗黑机制_人面桃花_单机架设搭建 二. 一些文件截图 完整教程和搭建文件获取: https://githubs.xyz/y24.html 三. 搭建步骤 安装虚拟机虚拟机打开一键端,然后登录root,密码:123456启动./run 脚本 &#xff0…

【201】Java8读取JSON树形结构并插入到MySQL数据库表中

我写了一个 maven 项目的 Demo,用来演示 JAVA8 如何读取 JSON 文件树形结构,并将这种树形结构保存到 MySQL 中。 json文件 city.json {"name": "山东省","sub": [{"name": "青岛市","sub"…

Java | Leetcode Java题解之第14题最长公共前缀

题目: 题解: class Solution {public String longestCommonPrefix(String[] strs) {if (strs null || strs.length 0) {return "";}int minLength Integer.MAX_VALUE;for (String str : strs) {minLength Math.min(minLength, str.length…

汇川PLC学习Day4:电机参数和气缸控制参数

汇川PLC学习Day4:伺服电机参数和气缸控制参数 一、伺服电机参数二、气缸参数1. 输入IO映射(1)输入IO映射(2) 输入IO触摸屏标签显示映射 2. 输出IO映射(1)输出IO映射(2) …

摄影杂记一

摄影小白,最近买了一台微单,型号是佳能R10,加上18-150套机镜头和佳能RF 50 F1.8定焦镜头。开始学习摄影。 PS:摄影穷三代,单反毁一生。嘿嘿。 一、分镜头拍摄四步提升法 B站:六斤 拍视频三件事&#xff1…

4.2.k8s的pod-标签管理、镜像拉取策略、容器重启策略、资源限制、优雅终止

一、标签管理 1.标签在k8s中极其重要,大多数资源的相互关联就需要使用标签;也就是说,资源的相互关联大多数时候,是使用标签进行关联的; 2.其他作用,在k8s集群中,node节点的一些操作比如污点及污…

【Java设计模式】创建型——工厂方法模式

目录 背景/问题解决方案思路方案 图解简单工厂模式/静态工厂模式工厂方法模式 代码示例:图形工厂意图主要解决何时使用如何解决关键代码 工厂模式的优点工厂模式的缺点使用场景注意事项 背景/问题 在软件设计中,我们经常遇到需要创建不同类型对象的情况…

NzN的数据结构--栈的实现

在前面我们已经学习了哪些线性数据结构呢?大家一起来回顾一下:C语言学过的数组,数据结构中的线性表和顺序表和链表。那我们今天再来介绍数据结构里的两个线性结构--栈和队列。 目录 一、栈的概念及结构 二、用数组实现栈 1. 栈的初始化和…

linux--进程创建

执行了3次ps -f ,ps -f的父进程的ID(PPID)都是一样的,即bash. 实际上Linux上这个bash就是不断的复制自身,然后把复制出来的用exec替换成想要执行的程序(比如ps); 运行ps,发现ps是bash的一个子进程;原因就是bash把自己复制一份,然后替换成ps; 替换,这里就体现了写时拷贝的意义,…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则,ETL中规则在很多组件中都能看见,可以理解为按照事前约定好的逻辑去执行,规则可以使得数据更加的规范统一,同时也不需要去纵向的修改底层代码,只需要动态编…

自动驾驶汽车关键技术_感知

自动驾驶汽车关键技术|感知 附赠自动驾驶学习资料和量产经验:链接 两套标准 分别由美国交通部下属的国家高速路安全管理局(NationalHighwayTraffic Safety Administration ,NHSTA) 和国际汽车工程师协会(Societyof Automotive Engineers&am…

复现chatgpt_ros,需要openapi key

1. 前置工作: 现在ubuntu系统是20.04ros1,现在用docker新建并安装ros2: 最简单的,用大佬的一键安装: wget http://fishros.com/install -O fishros && . fishros 其次自己装…

代码随想录刷题——5双指针法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言5.1 移除元素(3.30)5.2 翻转字符串(3.30)5.3 替换数字(3.30)5.4 翻转字符串里的单词(3.3…

FlutterFlame游戏实践#08 | 打砖块 -关卡设计

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! Flutter\&Flame 游戏开发系列前言: 该系列是 [张风捷特烈] 的 Flame 游戏开发教程。Flutter 作为 全平台 的 原生级 渲…

SQL注入---POST注入

文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 一. POST提交概述 在Webshell文章中介绍过post提交和get提交的区别,这里不再赘述 post提交和get提交的区别: get方式提交URL中的参数信息,post方式则是将信…

【学习分享】小白写算法之选择排序篇

【学习分享】小白写算法之选择排序篇 前言一、什么是选择排序算法二、选择排序算法如何实现三、C语言实现算法四、复杂度计算五、算法稳定性六、小结 前言 简单排序有三种,冒泡排序,插入排序和选择排序。这三种排序的算法算是入门级别的,打好…