当前位置: 首页 > news >正文

重回C语言之老兵重装上阵(六)枚举

1. 什么是枚举 (enum)?

枚举(enum)是 C 语言中的一种数据类型,用于定义一组具名的整数常量。它可以使代码更加可读,帮助程序员更容易理解程序中的常量值。通过枚举,程序员可以使用有意义的名称来代替数字,增加程序的可维护性。

2. 枚举的定义和语法

2.1 定义枚举

使用 enum 关键字定义一个枚举类型,语法格式如下:

enum 枚举名 {枚举常量1,枚举常量2,枚举常量3,...
};

2.2 枚举的举例

#include <stdio.h>// 定义一个枚举类型 Days
enum Days {Sunday,    // 默认为 0Monday,    // 默认为 1Tuesday,   // 默认为 2Wednesday, // 默认为 3Thursday,  // 默认为 4Friday,    // 默认为 5Saturday   // 默认为 6
};int main() {enum Days today;today = Wednesday;  // 将 Wednesday 赋值给 today// 打印出枚举常量对应的整数值printf("Value of today: %d\n", today);return 0;
}

输出:

Value of today: 3

在上面的代码中,枚举类型 Days 定义了 7 个星期天至星期六的常量,它们的默认值依次为 0, 1, 2, ..., 6

3. 自定义枚举常量的值

可以为枚举常量指定自定义的整数值。如果没有显式指定值,则从第一个枚举常量开始,默认值为 0,每个常量的值依次递增。

3.1 自定义值的语法

enum 枚举名 {枚举常量1 = 自定义值,枚举常量2,枚举常量3 = 自定义值,...
};

3.2 示例:自定义枚举常量的值

#include <stdio.h>enum Days {Sunday = 1,    // 自定义值Monday,        // 默认为 2Tuesday = 5,   // 自定义值Wednesday,     // 默认为 6Thursday,      // 默认为 7Friday,        // 默认为 8Saturday       // 默认为 9
};int main() {enum Days today;today = Tuesday;  // 将 Tuesday 赋值给 todayprintf("Value of today: %d\n", today);  // 输出 Tuesday 对应的整数值return 0;
}

输出:

Value of today: 5

在上面的代码中,Sunday 被赋值为 1,Tuesday 被赋值为 5,其余枚举常量按顺序自增。

4. 枚举类型的使用

4.1 枚举作为变量类型

枚举类型可以作为变量的类型,定义变量时使用枚举类型名。枚举变量可以存储枚举常量的值。

enum Day {Sunday,Monday,Tuesday
};enum Day today;  // 定义一个枚举变量 today
today = Monday;  // 给 today 赋值为 Monday

4.2 枚举值与整数的关系

枚举常量实际上是整数类型,所以它们可以与其他整数值进行比较,甚至用于算术运算。

enum Week {Sun = 1,Mon,Tue,Wed,Thu,Fri,Sat
};int main() {enum Week today = Mon;if (today == 2) {  // 由于 Mon 的值是 2printf("Today is Monday.\n");}return 0;
}

4.3 枚举类型的转换

尽管枚举类型是整型,但它们通常不会被隐式地转换为其他数据类型。可以通过显式转换将枚举值转换为整数:

enum Day {Sunday = 0,Monday,Tuesday
};int main() {enum Day today = Monday;int dayValue = (int) today;  // 将枚举值转换为整数printf("Day value: %d\n", dayValue);return 0;
}

输出:

Day value: 1

5. 枚举的应用场景

  • 提高代码可读性:通过使用有意义的枚举名称,替代整数常量,使代码更加清晰。
  • 状态标识:用于表示不同的状态,例如网络请求的状态、任务的进度等。
  • 位域标志:用于位操作,可以使用枚举来表示不同的位标志。

5.1 例子:使用枚举表示状态

#include <stdio.h>enum Status {SUCCESS = 0,FAILURE = 1,PENDING = 2
};int main() {enum Status currentStatus = FAILURE;if (currentStatus == FAILURE) {printf("The operation failed.\n");}return 0;
}

5.2 例子:位标志和枚举

#include <stdio.h>enum Permission {READ = 1,    // 0001WRITE = 2,   // 0010EXECUTE = 4  // 0100
};int main() {int userPermission = READ | WRITE;  // 用户有读写权限if (userPermission & READ) {printf("User has read permission.\n");}if (userPermission & WRITE) {printf("User has write permission.\n");}if (userPermission & EXECUTE) {printf("User has execute permission.\n");}return 0;
}

6. 枚举的优缺点

6.1 优点

  • 增强可读性:枚举能够用具名的常量替代数字,提高代码的可理解性。
  • 减少错误:枚举确保了常量值是有限且预定义的,减少了使用无效值的可能性。
  • 便于维护:可以集中管理和修改枚举常量,提高程序的可维护性。

6.2 缺点

  • 类型不安全:枚举类型本质上是整数,因此容易出现类型不一致的错误。虽然 C 语言没有内置的枚举类型安全机制,但可以通过类型检查来避免此问题。
  • 存储空间:枚举常量的存储方式和 int 类型相同,可能会占用较多的内存。

相关文章:

重回C语言之老兵重装上阵(六)枚举

1. 什么是枚举 (enum)&#xff1f; 枚举&#xff08;enum&#xff09;是 C 语言中的一种数据类型&#xff0c;用于定义一组具名的整数常量。它可以使代码更加可读&#xff0c;帮助程序员更容易理解程序中的常量值。通过枚举&#xff0c;程序员可以使用有意义的名称来代替数字&…...

STL-list类

list的介绍和使用 list的介绍 list的介绍list的介绍 list是双向循环链表 list的使用 构造 list(size_t n,const value_type& val value_type())构造的list中包含n个值为val的元素list()构造空listlis(const list& x)拷贝构造函数list(inputlerator first,inputlter…...

Hanlp的学习

参考&#xff1a;HanLP 自然语言处理使用总结-CSDN博客 参考&#xff1a;Sprint Boot 工程中HanLP配置相对路径&#xff0c;始终有问题的解决方案_springboot hanlp-CSDN博客 <!--hanlp 依赖--><dependency><groupId>com.hankcs</groupId><artifa…...

Excel中函数SIGN()的用法

Excel中函数SIGN的用法 1. 函数详细讲解1.1 函数解释1.2 使用格式1.3 参数定义1.4 要点 2. 实用演示示例2.1 函数需求2.2 公式编写 3. 注意事项4. 文档下载5. 其他文章6. 获取全部Excel练习素材快来试试吧&#x1f970; 函数练习素材&#x1f448;点击即可进行下载操作操作注意…...

如何将本地电脑上的文件夹设置为和服务器的共享文件夹

将本地电脑上的文件夹设为与服务器共享的文件夹&#xff0c;通常是在本地开启文件共享&#xff0c;并配置相应的权限&#xff0c;使服务器可以访问该文件夹。以下以 Windows 系统为例说明具体操作步骤&#xff1a; 一、在本地电脑上设置共享文件夹 选择文件夹 找到需要共享的文…...

智能建筑时代的核心选择——基于SAIL-RK3576核心板的AI边缘计算网关方案

随着智能建筑技术的不断发展&#xff0c;建筑设备正日益向“智慧化”迈进。传统的建筑管理系统往往依赖中央服务器和云端平台进行数据处理和控制&#xff0c;但在实时监控、安防及能耗管理等关键环节&#xff0c;延迟和数据安全问题依然存在。此外&#xff0c;物联网设备数量激…...

08、如何预防SQL注入

目录 1、分析及其存在哪些危险 2、预防SQL注入 1、分析及其存在哪些危险 原理: SQL 注入是一种常见的网络攻击手段,攻击者通过在用户输入中插入恶意的 SQL 语句,利用程序对用户输入处理不当的漏洞,使恶意 SQL 语句被数据库服务器执行。 通常发生在应用程序将用户输入直接拼…...

【时时三省】(C语言基础)柔性数组

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 柔性数组 C99中&#xff0c;结构中的最后一个元素允许是未知大小的数组&#xff0c;这就叫做 柔性数组 成员。 例如&#xff1a; 这里把arr就称为柔性数组 有的编译器上是写成int arr&…...

mongodb详解二:基础操作

基础操作 数据库操作collection操作查看表插入数据查找数据 数据库操作 1.创建数据库 use test_db;如果没有数据库&#xff0c;use命令会新建一个&#xff1b;有的话&#xff0c;会切换到这个数据库 2.查看数据库 show dbs;collection操作 查看表 show tables;插入数据 …...

【数据分享】1929-2024年全球站点的逐月平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01;本次我们为大家带来的就是具体到气象监…...

管理口令安全和资源(一)

学习目标 Manage passwords using profiles: 使用配置文件&#xff08;profiles&#xff09;来管理密码。这意味着你应该能够设置和修改密码策略&#xff0c;比如密码的复杂性、有效期、尝试次数限制等。在Oracle数据库中&#xff0c;配置文件是一组可以应用于所有用户的预定义…...

【Linux】【Vim】vim编辑器的用法

一、vim简介 Vim是一款功能强大且高度可定制的文本编辑器&#xff0c;广泛应用于Linux 和 Unix系统中。 它不仅继承了vi编辑器的所有特性&#xff0c;还增加了许多新的功能&#xff0c;如语法高亮、代码折叠、多级撤销等。 Vim有三种主要的工作模式&#xff1a; 命令模式&am…...

Golang Gin系列-3:Gin Framework的项目结构

在Gin教程的第3篇&#xff0c;我们将讨论如何设置你的项目。这不仅仅是把文件扔得到处都是&#xff0c;而是要对所有东西的位置做出明智的选择。相信我&#xff0c;这些东西很重要。如果你做得对&#xff0c;你的项目会更容易处理。当你以后不再为了找东西或添加新功能而绞尽脑…...

LabVIEW实车四轮轮速信号再现系统

开发了一个基于LabVIEW的实车四轮轮速信号再现系统。该系统解决现有电机驱动传感器成本高、重复性差、真实性差和精度低等问题&#xff0c;提供一种高精度、低成本的轮速信号再现解决方案。 项目背景 ABS轮速传感器在现代汽车安全系统中发挥着至关重要的作用。为保证其准确性和…...

2025.1.16——六、BabySQL 双写绕过|联合注入

题目来源&#xff1a;buuctf [极客大挑战 2019]BabySQL 1 目录 一、打开靶机&#xff0c;分析已知信息 二、手工注入解题 step 1&#xff1a;万能密码 step 2&#xff1a;正常注入&#xff0c;判断字段数 step 3&#xff1a;绕过 step 4&#xff1a;查数据库 step 5&am…...

Spring Boot 下的Swagger 3.0 与 Swagger 2.0 的详细对比

先说结论&#xff1a; Swgger 3.0 与Swagger 2.0 区别很大&#xff0c;Swagger3.0用了最新的注释实现更强大的功能&#xff0c;同时使得代码更优雅。 就个人而言&#xff0c;如果新项目推荐使用Swgger 3.0&#xff0c;对于工具而言新的一定比旧的好&#xff1b;对接于旧项目原…...

【已解决】git clone报错:Failed to connect to github.com port 443: Timed out

1.问题原因1 报错信息1&#xff1a; fatal: unable to access https://github.com/microsoft/xxx/: Failed to connect to github.com port 443: Timed out 报错信息2&#xff1a; fatal: unable to access https://github.com/xxx/xx/: OpenSSL SSL_read: Connection was …...

Qt 程序 DPI 适配方法归纳

方案1&#xff1a;通过 Windows api 处理 缺点&#xff1a;放大之后界面会模糊。 通过调用api实现 #include <ShellScalingAPI.h> #pragma comment(lib, "Shcore.lib")HRESULT hr SetProcessDpiAwareness(PROCESS_SYSTEM_DPI_AWARE);或者使用qt.conf 实现 在…...

AI刷题-小R的随机播放顺序、不同整数的计数问题

目录 一、小R的随机播放顺序 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终代码&#xff1a; 运行结果&#xff1a; 二、 不同整数的计数问题 问题描述 测试样例 解题思路&#xff1a; 问题理解 数据结构选择 算法步骤 最终…...

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行&#xff0c;执行 WSL --install -d ubuntu若报错&#xff0c;则先执行 WSL --update2. 重启电脑 因安装了子系统&#xff0c;需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示&#xff0c;输入账号&#xff0c;密…...

Acode移动代码编辑器:打造随时随地的高效编程体验

Acode移动代码编辑器&#xff1a;打造随时随地的高效编程体验 【免费下载链接】Acode Acode - powerful text/code editor for android 项目地址: https://gitcode.com/gh_mirrors/ac/Acode 在移动设备上编写代码时&#xff0c;你是否常常感到力不从心&#xff1f;小屏幕…...

Flink学习笔记:窗口

简介 langchain中提供的chain链组件&#xff0c;能够帮助我门快速的实现各个组件的流水线式的调用&#xff0c;和模型的问答 Chain链的组成 根据查阅的资料&#xff0c;langchain的chain链结构如下&#xff1a; $$Input \rightarrow Prompt \rightarrow Model \rightarrow Outp…...

Qwen3-0.6B-FP8效果展示:实时流式输出延迟<120ms(RTX3060实测)

Qwen3-0.6B-FP8效果展示&#xff1a;实时流式输出延迟<120ms&#xff08;RTX3060实测&#xff09; 你还在为本地部署大模型需要高端显卡而烦恼吗&#xff1f;或者觉得那些动辄几十GB的模型下载起来太费劲&#xff1f;今天&#xff0c;我要给你展示一个完全不同的解决方案—…...

DeepSeek-VL2微调报错“AssertionError”终极解决:修改config.json里的topk_method参数

DeepSeek-VL2微调报错"AssertionError"终极解决方案&#xff1a;深入解析topk_method参数 当你满怀期待地准备微调DeepSeek-VL2这个强大的多模态大模型时&#xff0c;却在训练启动阶段遭遇了令人沮丧的"AssertionError"和"assert not self.training&q…...

MATLAB伪彩色增强实战:从灰度分层到频域处理的完整指南

1. 伪彩色增强技术入门指南 第一次接触伪彩色增强是在研究生课题中&#xff0c;当时需要分析一批医学X光片。盯着那些灰蒙蒙的片子看了三天后&#xff0c;我突然意识到&#xff1a;人眼对色彩差异的敏感度&#xff0c;确实远超对灰度变化的感知。这就是伪彩色技术的核心价值——…...

高效保存微信聊天记录:3步实现永久备份与深度分析完整指南

高效保存微信聊天记录&#xff1a;3步实现永久备份与深度分析完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...

HG-ha/MTools行业实践:短视频工作室AI配音+自动字幕+封面图生成闭环

HG-ha/MTools行业实践&#xff1a;短视频工作室AI配音自动字幕封面图生成闭环 你是不是也遇到过这样的场景&#xff1f;作为短视频工作室的创作者&#xff0c;每天都要面对海量的视频素材。一条1分钟的视频&#xff0c;从剪辑、配音、加字幕到制作封面&#xff0c;前前后后可能…...

STEP3-VL-10B WebUI教程:自定义快捷提示词模板+一键插入常用指令

STEP3-VL-10B WebUI教程&#xff1a;自定义快捷提示词模板一键插入常用指令 你是不是每次用多模态AI模型时&#xff0c;都要重复输入那些固定的指令&#xff1f;比如“请详细描述这张图片”、“帮我分析这个图表的数据”、“用中文回答”……一遍又一遍地打字&#xff0c;不仅…...

实战指南:用快马平台生成团队统一的homebrew环境配置脚本,保障协作无忧

最近在团队协作中遇到了一个头疼的问题&#xff1a;新成员加入时&#xff0c;光是搭建开发环境就要折腾一整天。不同成员的电脑上软件版本参差不齐&#xff0c;导致"在我机器上能跑"的经典问题频繁出现。经过一番摸索&#xff0c;我发现用homebrew配合bash脚本可以完…...

Web 开发者零 AI 基础入门:Skill 开发实战全攻略

引言&#xff1a;提示词是即兴发挥&#xff0c;Skill 是专业标准前言&#xff1a;作为 Web 开发者&#xff0c;我们早已习惯「组件化开发、接口化调用、工程化部署」的工作流。面对 AI 应用落地&#xff0c;很多人误以为必须精通大模型、机器学习才能参与开发。事实上&#xff…...