C语言自定义类型——枚举

news2024/11/28 9:59:13

枚举

  • 枚举定义
  • 枚举 与 #define
  • 使用
    • 写一个简易计算器的程序。

枚举定义

格式:

enum name(枚举什么类型)
{
	//数据 ...
};

枚举,顾名思义一 一 列举。
在生活当中有很多可以列举的东西。
如:

//电脑桌面上的软件
enum App
{
	QQ ,
	WeChat,
	CCtalk,
	idea,
	VisualStudio2022,
	WeGame
};
//有意思的是,大学英语老师曾经让我上黑板默写星期一到星期天的英文。没写出来,真的好尴尬。
enum Day//星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};
enum Sex
{
	Man,
	Woman,
	Ladyboy
};

上面的enum Sex enum Day是枚举类型。
而括号里的内容是枚举类型的可能取值,也叫枚举常量。

1.这些可能的取值都默认有值的,默认是从0开始,每次加一。


#include<stdio.h>

//枚举中的数据有默认值从0,每次增加1
enum Day//星期
{
	Mon,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

int main()
{
	printf("Monday:   %d\n", Mon);
	printf("Tuesday:  %d\n", Tues);
	printf("Wednesday:%d\n", Wed);
	printf("Thursday: %d\n", Thur);
	printf("Friday:   %d\n", Fri);
	printf("Saterday: %d\n", Sat);
	printf("Sunday:   %d\n", Sun);

	return 0;
}

在这里插入图片描述
2.这些默认的值也可以修改。

  • 从6开始
    在这里插入图片描述
  • 先默认一些,再修改
    在这里插入图片描述

枚举 与 #define

我们使用#define 就可以定义常量了,那为什么还要使用枚举呢?存在即合理呗
枚举的优点:

  • 增加代码的可读性和维护性
  • 枚举有类型检查更加严谨
  • 便于调试,预处理阶段会删除#define定义的标识符
  • 使用方便,一次可以定义多个常量
  • 有作用域规则

使用

写一个简易计算器的程序。


#include<stdio.h>

void menu()
{
	printf("--------------简易计算器-------------\n");
	printf("-------------1.add-----2.sub-------\n");
	printf("-------------3.mul-----4.div-------\n");
	printf("-------------5.mod-----0.exit------\n");
	printf("-----------------------------------\n");

}

int add(int a, int b)
{
	return  a + b;
}
int sub(int a, int b)
{
	return  a - b;
}
int mul(int a, int b)
{
	return  a * b;

}
int div(int a, int b)
{
	return  a / b;
}
int mod(int a, int b)
{
	return  a % b;
}

enum Option
{
	EXIT,//0
	ADD,//1
	SUB,//2
	MUL,//3
	DIV,//4
	MOD //5
};


int main()
{
	int input = 0;
	int x, y, ret;
	
	do {

		menu();
		printf("请选择:>");
		scanf("%d", &input);

		switch (input)
		{
		case ADD:
			printf("输入操作数:");
			scanf("%d %d", &x, &y);
			ret = add(x, y);
			printf("ret = %d\n", ret);
			break;
		case SUB:
			printf("输⼊操作数:");
			scanf("%d %d", &x, &y);
			ret = sub(x, y);
			printf("ret = %d\n", ret);
			break;
		case MUL:
			printf("输⼊操作数:");
			scanf("%d %d", &x, &y);
			ret = mul(x, y);
			printf("ret = %d\n", ret);
			break;
		case DIV:
			printf("输⼊操作数:");
			scanf("%d %d", &x, &y);
			ret = div(x, y);
			printf("ret = %d\n", ret);
			break;
		case MOD:
			printf("输⼊操作数:");
			scanf("%d %d", &x, &y);
			ret = mod(x, y);
			printf("ret = %d\n", ret);
			break;
		case EXIT:
			printf("退出程序\n");
			break;
		default:
			printf("选择错误\n");
			break;
		}

	} while (input);

	return 0;
}

当然我们也可以用转移表,更简单。enum的使用还是需要以后不断发现。

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

void menu()
{
	printf("--------------简易计算器-------------\n");
	printf("-------------1.add-----2.sub-------\n");
	printf("-------------3.mul-----4.div-------\n");
	printf("-------------5.mod-----0.exit------\n");
	printf("-----------------------------------\n");

}

int add(int a, int b)
{
	return  a + b;
}
int sub(int a, int b)
{
	return  a - b;
}
int mul(int a, int b)
{
	return  a * b;

}
int div(int a, int b)
{
	return  a / b;
}
int mod(int a, int b)
{
	return  a % b;
}

int main()
{
	int select = 0;
	int a, b;
	int(*p[6])(int, int) = { 0,add,sub,mul,div,mod };//转移表
	while(1)
	{

		menu();
		printf("请输入选项:");
		scanf("%d", &select);
		if (select > 0 && select <= 5) 
		{
			printf("\n请输入两位操作数:");
			scanf("%d %d", &a,&b);printf("\n");
	
			int end = p[select](a, b);
			printf("结果:%d\n",end);

		}
		else if (select == 0) 
		{
			break;
		}
		else
		{
			printf("输入有误请重新输入!");
		}
		

	} 
	

	return 0;
}

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

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

相关文章

ESG榜单冲击数据集(2000-2022年)

参照《财经研究》中刘柏&#xff08;2024&#xff09;的做法&#xff0c;以2015年为中点&#xff0c;根据商道荣绿2015年6月公开的ESG榜单数据&#xff0c;构建ESG榜单冲击的DID数据&#xff0c;如果公司属于ESG榜单冲击的公司&#xff0c;且年份≥2015&#xff0c;则为1&#…

OBS插件--视频回放

视频回放 视频回放是一款源插件&#xff0c;它可以将指定源的视频缓存一段时间&#xff08;时间可以设定&#xff09;&#xff0c;将缓存中的视频添加到当前场景中后&#xff0c;可以快速或慢速不限次数的回放。这个功能在类似体育比赛的直播中非常有用&#xff0c;可以捕获指…

Leetcode - 周赛396

目录 一&#xff0c;3136. 有效单词 二&#xff0c;3137. K 周期字符串需要的最少操作次数 三&#xff0c;3138. 同位字符串连接的最小长度 四&#xff0c;3139. 使数组中所有元素相等的最小开销 一&#xff0c;3136. 有效单词 本题就是一道阅读理解题&#xff1a; 字符串长…

Docker Compose常用命令与属性

大家好&#xff0c;今天给大家分享Docker Compose的常用命令&#xff0c;以及docker-compose文件的属性。Docker Compose 是一个用于定义和运行多容器 Docker 应用应用的重要工具。它通过一个配置文件&#xff08;docker-compose.yml&#xff09;来详细定义多个容器之间的关联、…

爬虫-无限debug场景 解决方式

解决无限debug 场景1 1. 鼠标右键 选择 continue to here&#xff08;此处不停留&#xff09;2. 鼠标右键 选择 edite breakpoint 设置 10 保证条件不成立 这行永远不执行3.方法置空 1. 方法调用加断点2. 控制台 setInterval function name() {}4. 替换文件 5. hoo…

如何使用phpMyAdmin删除数据库中的表?

本周有一个客户&#xff0c;购买Hostease的Linux虚拟主机&#xff0c;询问我们的在线客服&#xff0c;如何使用phpMyAdmin删除数据库中的表&#xff1f;我们为用户提供相关教程&#xff0c;用户很快解决了遇到的问题。在此&#xff0c;我们分享这个操作教程&#xff0c;希望可以…

LeetCode63:不同路径Ⅱ

题目描述 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角…

飞凌嵌入式FET113i-S核心板在国产FTU中的适配性分析

智能电网建设的不断推进&#xff0c;使配电自动化成为了提升电网运行效率、保障供电质量的关键技术。在配电自动化系统中&#xff0c;馈线终端单元&#xff08;FTU&#xff09;作为连接电网与用户的重要节点&#xff0c;承担着实时监控、故障检测与隔离、远程控制等多项关键任务…

SpringMVC传递参数

1.RequestMapping RequestMapping本身可以处理&#xff0c;get或post,指定了get或post之后&#xff0c;就只能处理对应的请求。 RequestMapping(value{"haihiyo","goodMoring"},methodRequestMethod.POST)2.RestFul风格 RestFul是一种风格 比如:网站的访…

知识付费系统怎么搭建_轻松拥有知识付费平台

在信息爆炸的时代&#xff0c;知识的获取已不再局限于传统的课堂和书籍。随着科技的进步和互联网的普及&#xff0c;我们迎来了一个全新的知识获取方式——知识付费。今天&#xff0c;就让我们一起探讨如何搭建一个专属于您的知识付费系统&#xff0c;开启智慧的大门&#xff0…

VScode查看以十六进制查看文件的插件说明

找到插件并下载 打开指定的文件 选择打开方式即可 结果如下

AI写的论文AI疑似度太高怎么办?教你一招解决

随着 AI 技术迅猛发展&#xff0c;各种AI辅助论文写作的工具层出不穷&#xff01; 为了防止有人利用AI工具进行论文代写&#xff0c;在最新的学位法中已经明确规定“已经获得学位者&#xff0c;在获得该学位过程中如有人工智能代写等学术不端行为&#xff0c;经学位评定委员会…

诊所医院超常规运营管理思维课程

本课程旨在引领医疗机构管理者超越传统思维&#xff0c;探索创新运营管理策略。学员将学习领先的医疗管理理念、创新的运营模式&#xff0c;以及如何应对挑战和变革。课程内容涵盖战略规划、资源优化、服务创新等&#xff0c;帮助管理者提升运营效率&#xff0c;提供更优质的医…

什么是MVC?什么是SpringMVC?什么是三层架构?

文章目录 应用分层什么是MVC?什么是 SpringMVC&#xff1f;三层架构三层架构和MVC的关系 应用分层 在讲解什么是MVC之前&#xff0c;先来理解一下什么是应用分层。 应用分层是一种软件开发设计思想&#xff0c;将应用程序划分成N个层次&#xff0c;每个层次都分别负责自己的…

一对一WebRTC视频通话系列(五)——综合调试和功能完善

本系列博客主要记录一对一WebRTC视频通话实现过程中的一些重点&#xff0c;代码全部进行了注释&#xff0c;便于理解WebRTC整体实现。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统学习&#xff0c;梳理总结后写下文章&#xff0c;对音视频相关内容感…

燃料电池发电系统详解

目录 前言 组成结构 系统参数 常见问题 参考资料 前言 见《氢燃料电池技术综述》 见《燃料电池工作原理详解》 组成结构 燃料电池发电系统&#xff0c;由多个子系统和子模块组成&#xff0c;示例如下&#xff1a; 燃料处理系统&#xff08;fuel processing system&#xf…

开启短剧新纪元,短剧小程序开发等你来探索

一、引言 在信息爆炸的时代&#xff0c;短视频已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;随着人们对内容品质要求的不断提高&#xff0c;短剧作为一种新兴的内容形式&#xff0c;正逐渐崭露头角。为了满足广大用户对短剧内容的需求&#xff0c;我们倾力打造了…

Dark Reader:夜间模式,启动!

名人说&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、介绍二、下载安装1、Chrome应用商店&#xff08;需科学&#xff09;2、第三方直链下载 三、使…

在代码开发中的O(VO,BO,PO,DO,DTO)介绍

先来看个图各种O的地位&#xff1a; 从图中可以看到各种O 的位置和用法&#xff0c;接下来&#xff0c;进行简单对O进行介绍&#xff1a; BO&#xff1a;Business Object 业务对象&#xff0c;PO是一条交易记录&#xff0c;BO是一个人全部的交易记录集合对象 DTO&#xff1a;…

NSSCTF | [SWPUCTF 2021 新生赛]easy_sql

打开题目&#xff0c;提示输入一些东西&#xff0c;很显眼的可以看到网站标题为“参数是wllm” 首先单引号判断闭合方式 ?wllm1 报错了&#xff0c;可以判断为单引号闭合。 然后判断字节数&#xff08;注意‘--’后面的空格&#xff09; ?wllm1 order by 3-- 接着输入4就…