C语言枚举类型详解

 更新时间:2023年05月19日 08:28:25   作者:Icer_Newer  
这篇文章主要介绍了C语言枚举类型详解的相关资料,需要的朋友可以参考下

1.枚举类型

1.枚举数据类型是C语言中一种构造数据类型,可以让数据更加简洁,更易读,对于只有几个特定的数据,可以使用枚举类型
2.枚举对应英文enumeration,简写为enum
3.枚举是一组常量的集合,包含一组有限的特定的数据
4.枚举语法的定义格式为

highlighter-

enum 枚举名 {枚举元素}

1.1 实例1

使用枚举表示一个星期

highlighter- Bash

// 传统方法
#define MON 1;
#define TUE 2;
#define WeD 3;
#define THU 4;
#define FRI 5;
#define SAT 6;
#define SUN 7;

highlighter- Go

#include <stdio.h>
void main() {
	enum DAY
	{
                // 这里DAY 就是枚举类型, 包含了7个枚举元素 
                // 没有赋值,就按照顺序给值 0 1 2 3 4 ...
                // 枚举类型默认是从0开始的  
                // 给初始值之后会从初始值递增
		MON=1, TUE=2, WED=3, THU=4, FRI=5, SAT=6, SUN=7
	}; 
	enum DAY day; // enum DAY  是枚举类型, day 就是枚举变量 
	day = WED; //给枚举变量  day 赋值,值就是某个枚举元素
	printf("%d",day);// 3 , 每个枚举元素对应一个值
	getchar();
}

1.2 枚举类型声明

如同结构体(struct)和共用体(union)一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式:

highlighter- CSS

enum weekday{sun,mon,tue,wed,thu,fri,sat};	//定义枚举类型
enum weekday a,b,c;                             //定义3个枚举类型的变量
enum weekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;	//定义枚举类型的同时,定义3个变量
enum{sun,mon,tue,wed,thu,fri,sat}a,b,c;		//枚举名可省略,但后面不能再定义新的枚举变量

1.3 枚举类型取别名

highlighter- Go

// typeof可以把枚举类型定义一个别名
typedef enum weekday		//此处的weekday为枚举名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
} weekday;				//此处的weekday为enum weekday的别名
weekday today, tomorrow;		//枚举类型的变量,即enum weekday类型

highlighter- Go

// 枚举名可以省略
typedef enum 	//省略枚举名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
}weekday;				//此处的weekday为枚举类型的别名
weekday today, tomorrow;		//枚举类型的变量,即enum weekday类型

highlighter- Go

// typeof使用的时候不可以省略别名
typedef enum 	//省略枚举名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
}weekday;				//此处的weekday为枚举类型的别名
weekday today, tomorrow;		//枚举类型的变量,即enum weekday类型
  • 不能定义同名的枚举类型
  • 不能包含同名的枚举成员

1.4 枚举类型的遍历

C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的, 枚 举类型必须连续是可以实现有条件的遍历。以下实例使用 for 来遍历枚举的元素。

highlighter- Go

#include <stdio.h>

enum DAY {
      MON=1, TUE, WED, THU, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值
} day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY)


int main() {
	
	// 遍历枚举元素, 枚举的每个元素都对应数值
	//day++ 会给出警告,但是可以运行
	for (day = MON; day <= SUN; day++) { //SUN = 7
		printf("枚举元素:%d \n", day); // 1, 2, 3, 4,5,6,7
	}
	//day = FRI;
	//printf("%d", day); // 10
	getchar();
	return 0;

}

1.5 枚举类型在switch中的应用

highlighter- Bash

#include <stdio.h>

void  main() { 
    enum SEASONS {SPRING=1, SUMMER, AUTUMN, WINTER}; //定义枚举类型  enum SEASONS   
    enum SEASONS season;//定义了一个枚举类型变量 season(类型 enum SEASONS )
    printf("请输入你喜欢的季节: (1. spring, 2. summer, 3. autumn 4 winter): ");
    scanf("%d", &season);
    switch (season) {
    case SPRING:
        printf("你喜欢的季节是春天");
        break;
    case SUMMER:
        printf("你喜欢的季节是夏天");
        break;
    case AUTUMN:
        printf("你喜欢的季节是秋天");
        break;
    case WINTER:
        printf("你喜欢的季节是冬天");
        break;
    default:
        printf("你没有选择你喜欢的季节");
    }
    getchar();
    getchar();
  
}

到此这篇关于C语言枚举类型详解的文章就介绍到这了,更多相关C语言枚举类型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 盘点分析C语言中少见却强大的字符串函数

    盘点分析C语言中少见却强大的字符串函数

    这篇文章主要为大家盘点及分析C语言中少见却强大的字符串函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-02-02
  • C++ Boost Spirit进阶教程

    C++ Boost Spirit进阶教程

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-11-11
  • C++常用字符串分割方法实例汇总

    C++常用字符串分割方法实例汇总

    这篇文章主要介绍了C++常用字符串分割方法实例汇总,包括了strtok函数、STL、Boost等常用的各类字符串分割方法,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C++11引入的STL中的unordered系列关联式容器

    C++11引入的STL中的unordered系列关联式容器

    STL中的unordered系列容器是C++11引入的基于哈希表实现的关联式容器,STL unordered系列容器基于哈希表,支持快速查找但遍历效率低,适用于无序场景;树形容器基于红黑树,有序且性能稳定,适用于需要有序的场景
    2025-10-10
  • C语言实现财务管理系统

    C语言实现财务管理系统

    这篇文章主要为大家详细介绍了C语言实现财务管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C语言大小端格式举例详解

    C语言大小端格式举例详解

    大小端是嵌入式C语言中一个重要的概念,它涉及到多字节数据在内存中的存储顺序,下面这篇文章主要介绍了C语言大小端格式的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-12-12
  • 浅谈分词器Tokenizer

    浅谈分词器Tokenizer

    分词器的工作就是分解文本流成词(tokens).在这个文本中,每一个token都是这些字符的一个子序列。一个分析器(analyzer)必须知道它所配置的字段,但是tokenizer不需要,分词器(tokenizer)从一个字符流(reader)读取数据,生成一个Token对象(TokenStream)的序列
    2021-06-06
  • 深入C/C++浮点数在内存中的存储方式详解

    深入C/C++浮点数在内存中的存储方式详解

    本篇文章是对C/C++浮点数在内存中的存储方式进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • QT中QByteArray与char、int、float之间的互相转化

    QT中QByteArray与char、int、float之间的互相转化

    本文主要介绍了QT中QByteArray与char、int、float之间的互相转化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • C++中点操作符和箭头操作符的使用详解

    C++中点操作符和箭头操作符的使用详解

    本篇文章介绍了,C++中点操作符和箭头操作符的使用详解。需要的朋友参考下
    2013-05-05

最新评论