C语言enum枚举

news2024/9/27 19:14:51

目录

  • 开头
  • 1.什么是枚举?
  • 2.枚举的优缺点
    • 优点
    • 缺点
  • 3.枚举的实际用途(这里只列举其一)
    • 简易计算器枚举版
    • ……
  • 结尾

开头

大家好,我叫这是我58。今天,我们要学关于C语言枚举的一些知识。

1.什么是枚举?

枚举,就是一一列举的意思,比如12个月就可以一一列举,三原色也可以一一列举,而东南西北这四个方向还可以一一列举,那么,枚举该怎样写呢?其实,枚举是这样写的:

enum RGB {
	RED,
	GREEN,
	BLUE
};

其中,enum是枚举的关键字,RGB是枚举的名称,而REDGREENBLUE则是枚举RGB的成员变量(这些成员变量的大小都等于int类型的大小),那么,这个RGB枚举里的REDGREENBLUE分别为什么值呢?如果想的话,那就一起看看这下面的三行代码吧。

printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);

经过这三行代码的打印之后,我们就会看到这打印出来的三个数字了,并且,从这张图片中,我们可以得知枚举RGB中的RED0GREEN1BLUE2了,因此,从这之中,我们知道了关于枚举的一个知识:枚举中的成员变量都是从上往下逐渐加1的。而在这之中,我们可以改变枚举里的成员变量的值吗?我的回答是可以,因为这就是改变枚举里的成员变量RED的值的方法:

enum RGB {
	RED = 7,
	GREEN,
	BLUE
};

现在,我们再用刚才用来打印枚举RGB里的所有成员变量的三段程序来运行一下,结果是这样子的:,从这三个被打印出来的数字中可以得知现在枚举RGB里的REDGREENBLUE分别为789了,因此,我们就知道枚举改变变量的方法就是跟赋值的方法一模一样了。那么,枚举变量到底是怎么在主函数存储的呢?其实,最好的答案就是这样:

enum RGB r = RED;

在这之中,enum为枚举的关键字,RGB为枚举的名称,r为枚举RGB的变量,RED则是枚举RGB的成员变量。之后,我们把枚举RGB的成员变量RED不赋值之后,我们就执行了:printf("%d\n", r);这样的函数了,执行之后,我们就发现这个函数输出一个7了,由此可以得知,enum RGB r = RED;是目前最没有问题的枚举变量在主函数存储的方式了,而后面,我们又测试了int r = RED;这段代码是否可行,却发现int r = RED;这段代码在C语言里是没有看出什么问题,而int r = RED;这段代码在C++中就爆出问题来了,由此也可以说明C++比C语言的类型检查的更严格。在看到这里之后,关于枚举的基本介绍就基本的讲完了。

2.枚举的优缺点

优点

  • 防止命名污染
  • 增加代码的可维护性和可读性,更能让人理解代码的意思
  • #define定义的标识符比较酶具有类型检查,更加严谨
  • 便于调试
  • 使用方便,一次可以定义多个常量

缺点

  • 暂无

3.枚举的实际用途(这里只列举其一)

简易计算器枚举版

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
enum Option {
    ADD = 1,
    SUM,
    TIM,
    DIV,
    MOD,
    POW,
    LMOVE,
    RMOVE
};
int Add(int i, int ia) {
    return i + ia;
}
int Sum(int i, int ia) {
    return i - ia;
}
int Tim(int i, int ia) {
    return i * ia;
}
int Div(int i, int ia) {
    return i / ia;
}
int Mod(int i, int ia) {
    return i % ia;
}
int Pow(int i, int ia) {
    return (int)pow(i, ia);
}
int Rmv(int i, int ia) {
    return i >> ia;
}
int Lmv(int i, int ia) {
    return i << ia;
}
void calc(int(*funp)(int, int)) {
    int i = 0;
    int ia = 0;
    printf("请输入你要计算的两个整型 -> ");
    scanf("%d %d", &i, &ia);
    printf("计算的结果为:%d", funp(i, ia));
}
int main() {
    int i = 0;
    printf("**********************************\n");
    printf("* 1.Add(+)   2.Sum(-)   3.Tim(*) *\n");
    printf("* 4.Div(/)   5.Mod(%c)   6.Pow(^) *\n", '%');
    printf("* 7.Rmv(>>)  8.Lmv(<<)           *\n");
    printf("**********************************\n");
    scanf("%d", &i);
    switch (i) {
    case ADD:
        calc(Add);
        break;
    case SUM:
        calc(Sum);
        break;
    case TIM:
        calc(Tim);
        break;
    case DIV:
        calc(Div);
        break;
    case MOD:
        calc(Mod);
        break;
    case POW:
        calc(Pow);
        break;
    case LMOVE:
        calc(Lmv);
        break;
    case RMOVE:
        calc(Rmv);
        break;
    default:
        break;
    }
    return 0;
}

……

结尾

在你看到这里之后,可以评论来互动一下我哦。

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

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

相关文章

Verilog刷题笔记53

题目&#xff1a; Fsm serialdata See also: Serial receiver Now that you have a finite state machine that can identify when bytes are correctly received in a serial bitstream, add a datapath that will output the correctly-received data byte. out_byte needs …

Identity IdCard OCR API 对接说明

Identity IdCard OCR API 对接说明 本文将介绍一种通过输入身份证图片 或 姓名和身份证号码&#xff0c;来校验姓名和身份证号的真实性和一致性。本接口用于校验姓名和身份证号的真实性和一致性&#xff0c;您可以通过输入姓名和身份证号或传入身份证人像面照片提供所需验证信…

消息系统-WebSocket消息推送

消息系统-WebSocket消息推送 接口层使用消息通知 1.数据库设计: 1.消息通知表 2.消息记录表 3.用户表和角色表及用户角色记录表 2.设计: 未使用消息中间件 ,利用接口层调用消息通知接口工具类 3.前端:消息通知页面 1.消息通知列表 2.消息通知标签 3.消息通知未读抽屉列表 一.…

【C#】虚部与实部

实数是数学中的一个基本概念&#xff0c;它包括了所有的有理数和无理数。实数集合是连续的&#xff0c;可以表示为数轴上的每一个点。 复数是实数的扩展&#xff0c;它允许进行除零以外的所有基本算术运算。复数由两部分组成&#xff1a;实部和虚部。 实部&#xff08;Real P…

计算机毕业设计选题推荐-springboot 基于SpringBoot的家电销售展示平台

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

迪杰斯特拉(Dijkstra)算法(C/C++)

迪杰斯特拉&#xff08;Dijkstra&#xff09;算法是一种用于在加权图中找到单个源点到所有其他顶点的最短路径的算法。它是由荷兰计算机科学家艾兹格迪科斯彻&#xff08;Edsger Dijkstra&#xff09;在1956年提出的。Dijkstra算法适用于处理带有非负权重的图。迪杰斯特拉算法主…

k8s上部署ingress-controller

一、安装helm仓库 # helm pull ingress-nginx/ingress-nginx 二、修改 三、运行 # kubectl label nodes node01.110111.cn ingresstrue# kubectl label nodes node02.110112.cn ingresstrue# helm upgrade --install ingress-nginx -n ingress-nginx . -f values.yaml 四、检…

布局管理(Layouts)-Qt-思维导图-学习笔记

布局管理(Layouts) Qt 提供了非常丰富的布局类&#xff0c;主要包括以下基本布局管理类 QBoxLayout 提供了水平和垂直的布局管理&#xff0c;可以将子部件按行或列排列。根据排列方向的不同&#xff0c;QBoxLayout 分为 QHBoxLayout&#xff08;水平布局&#xff09;和 QVBox…

宏定义———C语言

*符号代表全部的意思*.i代表的是全部的点i文件 宏定义 &#xff1a; 1.定义&#xff1a; #define 宏名 常量功能&#xff1a;宏名代替常量&#xff0c;宏名要求全大写且见名知义 2.示例&#xff1a; #include <stdio.h> #define PI 3.14 #define Q 4 #define P QQi…

Ubuntu系统+宝塔面板部署Frp内网穿透服务

一、搭建目的 上次在局域网中搭建了自己的个人网盘之后&#xff0c;上传文件、照片都很方便&#xff0c;但是只能限制在内网中访问&#xff01;所以这次再搭建一个内网穿透服务器&#xff0c;这样不管在哪里都能访问到家里的云盘&#xff01; 二、内网穿透Frp是什么&#xff1…

连接一切:Web3如何推动物联网的发展

物联网面临的挑战 物联网&#xff08;IoT&#xff09;作为现代科技的重要组成部分&#xff0c;通过将各种智能设备和系统互联&#xff0c;正在以惊人的速度改变我们的生活方式。从智能家居到智慧城市&#xff0c;物联网的应用无处不在。然而&#xff0c;随着设备数量的急剧增加…

华为---端口隔离简介和示例配置

目录 1. 端口隔离概念 2. 端口隔离作用 3. 端口隔离优点 4. 端口隔离缺点 5. 端口隔离的方法和应用场景 6. 端口隔离配置 6.1 端口隔离相关配置命令 6.2 端口隔离配置思路 7. 示例配置 7.1 示例场景 7.2 网络拓扑图 7.3 基本配置 7.4端口隔离配置与验证 7.4.1 双…

初识--树(1)

下面就是这篇博客要讲的内容 树 二叉树堆 树概念及结构二叉树的概念及结构二叉树的实现堆的概念及运用 这篇博客主要以二叉树为主要内容。 1、树的概念及结构 1.1树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限…

C语言 - 构造类型

构造类型&#xff1a; 数据类型的分类&#xff1a; 基本类型&#xff1a;整数型&#xff1a;短整型&#xff08;short&#xff09;、整型&#xff08;int&#xff09;、长整型&#xff08;long&#xff09;、长长整型&#xff08;long long&#xff09; 浮点型&#xff1a;单…

Java | Leetcode Java题解之第336题回文对

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> palindromePairs(String[] words) {List<List<Integer>> ans new ArrayList<>();int n words.length;for (int i 0; i < n; i) {for (int j 0; j < n…

让科技党狂喜的电动车什么样,新日凯迪拉氮,你值得拥有!

这些年电动车企为了创新可以说“八仙过海&#xff0c;各显神通”&#xff0c;有的深挖智能技术开辟新赛道&#xff0c;有的狂卷性能卷出新场景。然而&#xff0c;真正触动消费者心弦的是&#xff1a;如何实实在在地提升骑行体验。正是洞察了这一核心需求&#xff0c;新日电动车…

如何进行屏幕录制?有哪些免费的录屏软件推荐?

如何进行屏幕录制&#xff1f;有哪些免费的录屏软件推荐&#xff1f; 对于内容创作者、教育工作者和游戏玩家来说。精通屏幕录制技术已成为一项不可或缺的技能&#xff01;本文将深入探讨如何使用市面上的顶级屏幕录制软件&#xff0c;例如嗨格式录屏大师和OBS Studio&#xff…

hyper-v安装window10操作系统

Hyper-V是微软的一款虚拟化产品&#xff0c;是微软第一个采用类似Vmware ESXi和Citrix Xen的基于hypervisor的技术。 目标&#xff1a;在window10的物理机上基于hyper-v运行虚拟window10。 准备条件 准备好window10操作系统&#xff0c;iso、wim、esd等都行&#xff0c;我这…

侧向开敞式通风天窗的设计特点和优势

一、特点 1、侧向开启&#xff1a;与传统的顶开型窗户相比&#xff0c;侧向开敞式通风天窗采用侧向开启的方式&#xff0c;这种设计不仅为室内提供了更大的通风面积&#xff0c;还使得空气流动更加顺畅。 2、防雨功能&#xff1a;设计时考虑防雨需求&#xff0c;能够在下雨时保…

如何在C++ QT 程序中集成cef3浏览器组件去显示网页?

目录 1、问题描述 2、为什么选择cef3浏览器组件 3、cef3组件的介绍与下载 4、将cef3组件封装成sdk 5、如何使用cef3组件加载web页面 5.1、了解CefApp与CefClient 5.2、初始化与消息循环 5.3、如何创建浏览器 5.4、重载CefClient类 6、在qt客户端集成cef组件 7、最后…