c++枚举

article/2025/7/11 20:46:30

在这里插入图片描述

一、枚举类型的定义

枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。
定义格式:枚举类型的定义格式为:enum <类型名> {<枚举常量表>};

例如:

enum color_set1 {RED, BLUE, WHITE, BLACK}; // 定义枚举类型color_set1
enum week {Sun, Mon, Tue, Wed, Thu, Fri, Sat}; // 定义枚举类型week

二、枚举声明

  1. 枚举类型定义与变量声明分开

    如:

    enum Suit { Diamonds, Hearts, Clubs, Spades };enum Suit a;enum Suit b,c;
    

    变量a,b,c的类型都定义为枚举类型enum Suit

  2. 枚举类型定义与变量声明同时进行
    如:

    enum Suit { Diamonds, Hearts, Clubs, Spades }a,b,c;//此处类型名可以省略,如以下的声明也是可以的。enum { Diamonds, Hearts, Clubs, Spades }a,b,c;
    
  3. typedef先将枚举类型定义为别名,再利用别名进行变量的声明
    有以下几种方式:

    typedef enum Suit { Diamonds, Hearts, Clubs, Spades }Suit;enum Suit a;enum Suit b,c;
    
    typedef enum{ Diamonds, Hearts, Clubs, Spades }Suit;enum Suit a;enum Suit b,c;
    
    typedef enum Suit { Diamonds, Hearts, Clubs, Spades };enum Suit a;enum Suit b,c;
    

注意: 同一程序中不能定义同类型名的枚举类型;不同枚举类型的枚举元素不能同名。
枚举变量的值只能取枚举常量表中所列的值,就是整型数的一个子集。 枚举变量占用内存的大小与整型数相同。
枚举型可以隐式的转换为int型,int型不能隐式的转换为枚举型。
枚举变量只能参与赋值和关系运算以及输出操作,参与运算时用其本身的整数值。

三、 使用枚举类型的变量

3.1 对枚举型的变量赋值。

实例将枚举类型的赋值与基本数据类型的赋值进行了对比:
方法一:先声明变量,再对变量赋值

#include<stdio.h>/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };int main()
{/* 使用基本数据类型声明变量,然后对变量赋值 */int x, y, z;x = 10;y = 20;z = 30;/* 使用枚举类型声明变量,再对枚举型变量赋值 */enum DAY yesterday, today, tomorrow;yesterday = MON;today     = TUE;tomorrow  = WED;printf("%d %d %d \n", yesterday, today, tomorrow);
}

方法二:声明变量的同时赋初值

#include <stdio.h>/* 定义枚举类型 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };itn main()
{/* 使用基本数据类型声明变量同时对变量赋初值 */int x=10, y=20, z=30;/* 使用枚举类型声明变量同时对枚举型变量赋初值 */enum DAY yesterday = MON, today = TUE,tomorrow = WED;printf("%d %d %d \n", yesterday, today, tomorrow);
}

方法三:定义类型的同时声明变量,然后对变量赋值。

#include <stdio.h>/* 定义枚举类型,同时声明该类型的三个变量,它们都为全局变量 */
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } yesterday, today, tomorrow;/* 定义三个具有基本数据类型的变量,它们都为全局变量 */
int x, y, z;int main()
{/* 对基本数据类型的变量赋值 */x = 10;  y = 20;  z = 30;/* 对枚举型的变量赋值 */yesterday = MON;today     = TUE;tomorrow  = WED;printf("%d %d %d \n", x, y, z); //输出:10 20 30printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}

方法四:类型定义,变量声明,赋初值同时进行。

#include <stdio.h>/* 定义枚举类型,同时声明该类型的三个变量,并赋初值。它们都为全局变量 */
enum DAY
{MON=1, TUE,WED,THU,FRI,SAT,SUN 
}
yesterday = MON, today = TUE, tomorrow = WED;/* 定义三个具有基本数据类型的变量,并赋初值。它们都为全局变量 */
int x = 10, y = 20, z = 30;int main()
{printf("%d %d %d \n", x, y, z); //输出:10 20 30printf("%d %d %d \n", yesterday, today, tomorrow); //输出:1 2 3
}

3.2 对枚举型的变量赋整数值时,需要进行类型转换

#include <stdio.h>enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };int main()
{enum DAY yesterday, today, tomorrow;yesterday = TUE;today = (enum DAY) (yesterday + 1); //类型转换tomorrow = (enum DAY) 30; //类型转换//tomorrow = 3; //错误printf("%d %d %d \n", yesterday, today, tomorrow); //输出:2 3 30
}

3.3 使用枚举型变量

#include<stdio.h>enum
{ BELL          = '\a',BACKSPACE = '\b',HTAB         = '\t',RETURN      = '\r',NEWLINE    = '\n', VTAB         = '\v',SPACE       = ' '
};enum BOOLEAN { FALSE = 0, TRUE } match_flag;int main()
{int index = 0;int count_of_letter = 0;int count_of_space = 0;char str[] = "I'm Ely efod";match_flag = FALSE;for(; str[index] != '\0'; index++)if( SPACE != str[index] )count_of_letter++;else{match_flag = (enum BOOLEAN) 1;count_of_space++;}printf("%s %d times %c", match_flag ? "match" : "not match", count_of_space, NEWLINE);printf("count of letters: %d %c%c", count_of_letter, NEWLINE, RETURN);
}
输出:
match 2 times
count of letters: 10
Press any key to continue

四、综合实例

#include<stdio.h>enum Season
{spring, summer=100, fall=96, winter
};typedef enum
{Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday
}
Weekday;int main()
{/* Season */printf("%d \n", spring); // 0printf("%d, %c \n", summer, summer); // 100, dprintf("%d \n", fall+winter); // 193Season mySeason=winter;if(winter==mySeason)printf("mySeason is winter \n"); // mySeason is winterint x=100;if(x==summer)printf("x is equal to summer\n"); // x is equal to summerprintf("%d bytes\n", sizeof(spring)); // 4 bytes/* Weekday */printf("sizeof Weekday is: %d \n", sizeof(Weekday)); //sizeof Weekday is: 4Weekday today = Saturday;Weekday tomorrow;if(today == Monday)tomorrow = Tuesday;elsetomorrow = (Weekday) (today + 1); //remember to convert from int to Weekday
}

重要提示 枚举变量可以直接输出,但不能直接输入。如:cout >> color3; //非法 不能直接将常量赋给枚举变量。如:
color1=1; //非法 不同类型的枚举变量之间不能相互赋值。如: color1=color3; //非法
枚举变量的输入输出一般都采用switch语句将其转换为字符或字符串;枚举类型数据的其他处理也往往应用switch语句,以保证程序的合法性和可读性。


http://chatgpt.dhexx.cn/article/fypQuf16.shtml

相关文章

java枚举类及面试题为什么枚举实现单例模式是安全的?

目录 枚举类为什么会有枚举类&#xff1f;枚举类的使用枚举类的常用方法枚举的构造 枚举类型能被反射吗&#xff1f;为什么枚举实现单例模式是安全的&#xff1f; 枚举类的优缺点 枚举类 为什么会有枚举类&#xff1f; 假如说程序中有一些颜色的状态&#xff0c;或者说消息的类…

什么是枚举?

枚举有两种存在形式&#xff1a; 第一种是计算机编程语言的一种数据类型&#xff0c;enum&#xff0c;即枚举类型。在实际问题中&#xff0c;一些变量的取值被限制在一个有限的范围内&#xff0c;例如&#xff1a;一个星期内只有七天&#xff0c;一年只有十二个月…C语言为此提…

什么是枚举【详解】

本期介绍&#x1f356; 主要介绍&#xff1a;什么是枚举&#xff0c;枚举是如何定义、初始化的&#xff0c;以及枚举到底如何使用&#xff0c;还有枚举这种语法存在的优点有那些&#x1f440;。 文章目录 一、什么是枚举&#x1f356;二、枚举类型的定义&#x1f356;三、枚举…

输入文字后不会自动变长的下划线如何制作

问题&#xff1a;设置下划线时&#xff0c;随着文字增多&#xff0c;下划线延长&#xff0c;出现不对齐的情况 &#xff0c;如下图 解决&#xff1a;制作表格&#xff0c;把不需要的边框删除&#xff0c;就我现在需要的效果&#xff0c;实现步骤如下 制作表格 设置单元格的边距…

CSDN中用Markdown如何给文本加下划线(可延长下划线)

解决 使用<u></u>把文字包起来即可。 演示 <u>下划线</u>&#xff0c;效果&#xff1a; 下划线 如何延长下划线 如果想延长下划线&#xff0c;我们会发现直接打空格是没用的&#xff0c;<u>  下划线   </u>&#xff0c;效果&…

css鼠标划过文字出现往两边延伸的下划线

HTML&#xff1a; <div class"nav"><ul><li><a href"#">Gravit Designer</a></li><li><a href"#">Gravit Klex</a></li></ul></div> CSS&#xff1a; /*导航*/.nav{…

【深入理解JS核心技术】12. 什么是一阶函数

一阶函数是一个不接受另一个函数作为参数并且不返回函数作为其返回值的函数。 const firstOrder () > console.log("I am a first order function!"); 复制代码 函数名 函数名就是指向函数的指针&#xff0c;一个函数可以有多个名称。 function sum(num1, num2) …

一个正经的前端学习 开源 仓库(阶段十九)

低调务实优秀中国好青年 (简介) && 附加答案 中文 | English github.com/webVueBlog/… 一个 ☝️ 正经的前端学习 开源 仓库&#xff0c;启发来自 淘宝大佬 冴羽 &#xff0c;初心做一个真正能帮助到大家的仓库。&#xff08;非常口语化的&#xff0c;手写总结&#x…

【深入理解JS核心技术】1.在 JavaScript 中创建对象的可能方式有哪些?

创建对象的方式&#xff1a; 创建空对象&#xff0c;可以使用Object构造函数。&#xff08;对象构造函数&#xff09; var object new Object(); 复制代码 可以使用Object的create方法通过将原型对象作为参数来创建一个新对象 var object Object.create(null); 复制代码 可以…

一个正经的前端学习 开源 仓库(阶段十七-440)

低调务实优秀中国好青年 (简介) && 附加答案 中文 | English github.com/webVueBlog/… 一个 ☝️ 正经的前端学习 开源 仓库&#xff0c;启发来自 淘宝大佬 冴羽 &#xff0c;初心做一个真正能帮助到大家的仓库。&#xff08;非常口语化的&#xff0c;手写总结&#x…

【深入理解JS核心技术】11. 什么是一级函数

在 Javascript 中&#xff0c;函数是第一类对象。一等函数意味着当该语言中的函数被视为任何其他变量时。 例如&#xff0c;在这种语言中&#xff0c;一个函数可以作为参数传递给其他函数&#xff0c;可以由另一个函数返回&#xff0c;也可以作为一个值分配给变量。例如&#x…

一个正经的前端学习 开源 仓库(每日更新)-698道知识点

低调务实优秀中国好青年 (简介) && 附加答案 中文 | English 一个 ☝️ 正经的前端学习 开源 仓库&#xff0c;养成一个好习惯&#xff0c;遇见更好的 自己。一个人可能走得更快&#xff0c;但一群人会走得更远。&#xff08;非常口语化的&#xff0c;手写总结&#xf…

坚持每一天,不忘初心,正经的前端学习(705)

正经的前端学习 中文 | English 一个 ☝️ 正经的前端学习 开源 仓库&#xff0c;每天进步一点&#xff01;欢迎大家前来讨论&#xff0c;如果觉得对你的学习有一定的帮助&#xff0c;欢迎点个Star &#xff08;此仓库每天都会手动更新&#xff09; &#x1f339; &#x1f339…

VB.net:VB编程语言/VB.net语言编程的简介、IDE安装、学习路线(几十项案例代码实现)之详细攻略

VB.net&#xff1a;VB编程语言/VB.net语言编程的简介、IDE安装、学习路线(几十项案例代码实现)之详细攻略 目录 VB编程语言的简介 1、VB编程语言、VBA编程语言、VBS编程语言、VB.net编程语言对比 2、VB语言对比VB.net语言 (1)、VB6.0之前——.NET Framework 引入之前 (2)、…

vue3手动封装一个点击切换下滑线,事件委托,实现简易选项卡

点击切换下滑线 看看效果 body主要代码&#xff1a; 把点击事件绑定到父元素身上&#xff0c;因为把每个li都绑定一个事件工作量太大了&#xff0c;也不显示&#xff1b;所以利用事件委托 <ul click"disPlay"><li class"wy">网页端</l…

【参赛时间延长】InterSystems技术写作大赛:Python

嗨&#xff0c;开发者们&#xff01;欢迎加入第二届InterSystems技术写作大赛&#xff01; &#x1f40d; InterSystems技术写作大赛&#xff1a;Python &#x1f40d; 6月20日至七月20日 延长至7月31日&#xff0c;在社区撰写一篇利用InterSystems技术使用Python的文章&#x…

关于 Android 中 TabLayout 下划线适配文字长度解析(附清晰详细的源码解析)

温故而知新 坚持原创 请多多支持 一、问题背景 假期在做项目的时候&#xff0c;当时遇到了一个需求就是需要使用 TabLayout ViewPager 来实现一个上部导航栏的动态效果&#xff0c;并且希望下划线的长度等于或者小于导航栏中文字的宽度&#xff0c;当时从网上查询资料的时候是…

2021-4-29 工作记录--CSS-鼠标划过文字时,文字下方出现往两边延伸的下划线 + 鼠标划过文字,文字下面的下划线向中间消失;鼠标离开文字,文字下面的下划线向两边延申出现

一、CSS-鼠标划过文字时&#xff0c;文字下方出现往两边延伸的下划线 方法1&#xff1a; 举例&#xff1a; HTML: CSS: 对应代码&#xff1a; //css鼠标划过文字出现往两边延伸的下划线 .header_l li a, .header_r li:not(:last-child) a {position: relative;padding:…

html+导航栏+点击下划线,html导航栏点击后出现下划线_【Word教程】教你制作输入文字依然对齐的封面下划线......

点击上方“祕技”&#xff0c;关注我们 &#xff5e;助你提升工作技能~ 阅读全文大约需10分钟 在学习和生活中&#xff0c;使用word进行封面制作是很常见的应用场景&#xff0c;而下划线又是封面中不可缺少的元素。 很多同学在制作下划线时采用的是“空格下划线”的方法&#x…

论文封面标题下划线制作

一、问题描述 学校发的模板在填写信息的时候&#xff0c;下划线总是填写多少字就延长多少&#xff0c;文字前后加上空格 &#xff08;这样线是变长的&#xff09;是因为他用了文字下划线法&#xff1b; 二、制作方法 先将文字信息罗列出来 统一调整字符宽度 按照最长的字符长…