当前位置 博文首页 > 我会好好努力的:C enum(枚举)以及一个注意要点
枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。
枚举语法定义格式为:
enum 枚举名 {枚举元素1,枚举元素2,……};
接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
这个看起来代码量就比较多,接下来我们看看使用枚举的方式:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
这样看起来是不是更简洁了。
注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。
可以在定义枚举类型时改变枚举元素的值:
enum season {spring, summer=3, autumn, winter};没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5
枚举变量的定义
前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。
我们可以通过以下三种方式来定义枚举变量
1、先定义枚举类型,再定义枚举变量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;2、定义枚举类型的同时定义枚举变量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;3、省略枚举名称,直接定义枚举变量
enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;实例
#include<stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; int main() { enum DAY day; day = WED; printf("%d",day); return 0; }
以上实例输出结果为:
3在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。
以下实例使用 for 来遍历枚举的元素:
实例
#include<stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main() { // 遍历枚举元素 for (day = MON; day <= SUN; day++) { printf("枚举元素:%d \n", day); } }
以上实例输出结果为:
枚举元素:1 枚举元素:2 枚举元素:3 枚举元素:4 枚举元素:5 枚举元素:6 枚举元素:7以下枚举类型不连续,这种枚举无法遍历。
enum { ENUM_0, ENUM_10 = 10, ENUM_11 };枚举在 switch 中的使用:
实例
#include <stdio.h> #include <stdlib.h> int main() { enum color { red=1, green, blue }; enum color favorite_color; /* ask user to choose color */ printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): "); scanf("%d", &favorite_color); /* 输出结果 */ switch (favorite_color) { case red: printf("你喜欢的颜色是红色"); break; case green: printf("你喜欢的颜色是绿色"); break; case blue: printf("你喜欢的颜色是蓝色"); break; default: printf("你没有选择你喜欢的颜色"); } return 0; }
以上实例输出结果为:
请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1 你喜欢的颜色是红色将整数转换为枚举
以下实例将整数转换为枚举:
实例
#include <stdio.h> #include <stdlib.h> int main() { enum day { saturday, sunday, monday, tuesday, wednesday, thursday, friday } workday; int a = 1; enum day weekend; weekend = ( enum day ) a; //类型转换 //weekend = a; //错误 printf("weekend:%d",weekend); return 0; }
以上实例输出结果为:
weekend:1注意要点
发现使用for循环并不会真正遍历,而是根据开始循环位置的值而累加。实例如下:
#include<stdio.h> enum DAY{MON=1, TUE, WED, THU=7, FRI, SAT, SUN}; int main() { enum DAY day; for(day=MON;day<=SUN;day++) { printf("day=%d\n",day); } return 0; }
得到的结果:
day=1 day=2 day=3 day=4 day=5 day=6 day=7 day=8 day=9 day=10所以用来遍历是不可行的,它只是给 day 赋值了一个整数类型的值。
cs下一篇:没有了
最新 更多<<
我会好好努力的:C enum(枚举)以及一个注意要点 WGVWbig的博客:自定义类型详解(结构体,枚举,联合体) internal‘_【欢迎关注,一起学习,共同进步!】:【Ubuntu18.04 数据库天地:[MSSQL]SQL简繁转换函数 xixi:for 循环删除数组里面的多个对象 需要用到 removeObjectsA xixi:waitUntilDone YES/ NO xixi:NSSelectorFromString 的使用,根据字符串来调用相应名字 xixi:javascript 与 Object-C 的交互-(一) xixi:javascript 与 Object-C 的交互-(二) xixi:覆盖 CSS 的方法 优先级别 xixi:创建一个 iOS 的 Widget (一) xixi:创建一个 iOS 的 Widget (二) xixi:搭建react native mac 环境 xixi:long long除以long long 或者 int除以int 为什么得到是0 xixi:本地通知(UILocalNotification) - 隔几分钟或者几个小时 xixi:iOS Xcode 查找项目里面的字符串 xixi:go 安装下载 for Mac xixi:iOS 在Unit Testing 里面使用第三方库 xixi:golang string 和 int 的互相转换 xixi:xcode 回车enter 之后会自动缩进Tab 数据结构和算法:Android ArrayMap源码详解 数据结构和算法:Android TypedArray源码详解 g5703129的博客:java学习笔记总结,持续更新中 lzh_2_4的博客:各种笔记 RtxTitanV的博客:Java并发总结之线程池 God_Y:编程面试题整理 晴天的专栏:怎样规划你毕业以后的人生 流年的博客:C++语言篇 字符串及字符数组练习 数据分析与统计学之美的博客:万字肝货 | 超全总结,Linux常用磁 Java小咖秀的博客:2万字Linux实用&常用命令总结,收藏不吃