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++之Boost::array用法简介

    C++之Boost::array用法简介

    这篇文章主要介绍了C++之Boost::array用法简介,较为详细的分析了Boost::array中的常见用法,并用实例的形式予以总结归纳,需要的朋友可以参考下
    2014-10-10
  • Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析

    Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析

    这篇文章主要介绍了Objective-C中常用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect实例分析,有助于更加直观的理解Object-C常用的结构体,需要的朋友可以参考下
    2014-07-07
  • C++实现单例模式日志输出详解

    C++实现单例模式日志输出详解

    这篇文章主要为大家详细介绍了C++中单例模式的相关知识,并给出单例模式日志实现,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-04-04
  • C语言版实现链队列

    C语言版实现链队列

    这篇文章主要为大家详细介绍了C语言版实现链队列,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • C++抽奖程序实现方法

    C++抽奖程序实现方法

    这篇文章主要介绍了C++抽奖程序实现方法,实例分析了C++随机数的生成技巧与抽奖程序的实现方法,需要的朋友可以参考下
    2015-07-07
  • C++中函数模板的用法详细解析

    C++中函数模板的用法详细解析

    所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板
    2013-10-10
  • 详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    详解C++中构造函数,拷贝构造函数和赋值函数的区别和实现

    这篇文章主要介绍了C++中构造函数,拷贝构造函数和赋值函数的区别和实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • C语言实现带头双向循环链表的接口

    C语言实现带头双向循环链表的接口

    这篇文章主要为大家详细介绍了C语言实现带头双向循环链表的接口,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • C语言深入浅出解析二叉树

    C语言深入浅出解析二叉树

    二叉树可以简单理解为对于一个节点来说,最多拥有一个上级节点,同时最多具备左右两个下级节点的数据结构。本文将详细介绍一下C++中二叉树的实现和遍历,需要的可以参考一下
    2022-03-03
  • C语言实现YUV文件转JPEG格式

    C语言实现YUV文件转JPEG格式

    这篇文章主要为大家详细介绍了如何利用C语言实现将YUV文件转为JPEG格式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12

最新评论