看一个需要
举个例子,比如:一星期有 7 天, 请定义数据表示星期一到星期天.
传统的方法
使用#define 来完成
#define MON 1
#define TUE 2
#define WED 3
#define THU 4
#define FRI 5
#define SAT 6
#define SUN 7
分析:这个看起来代码量较多,并且不好管理 => 枚举
基本介绍
1)枚举是 C 语言中的一种构造数据类型,它可以让数据更简洁,更易读, 对于只有几个有限的特定数据,可以 使用枚举.
2)枚举对应英文(enumeration, 简写 enum)
3)枚举是一组常量的集合,包含一组有限的特定的数据
4)枚举语法定义格式为
enum 枚举名 {枚举元素 1,枚举元素 2,……};
快速入门
在这里插入代码片
枚举的遍历
C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,枚举类型必须连续是可以实现有条件的 遍历。以下实例使用 for 来遍历枚举的元素
#include<stdio.h>
enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值
} day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY)
void main(){
// 遍历枚举元素
//day++ 会给出警告,但是可以运行
for(day = MON; day <= SUN; day++){
printf("\n %d",day);
}
}
switch 中使用枚举
C 语言中,switch 中可以使用枚举类型,案例如下:
#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("你没有选择你喜欢的季节");
}
}
枚举类型使用注意事项和细节
1) 第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推.
2)在定义枚举类型时改变枚举元素的值
enum DAY {
MON, TUE, WED, THU=9, FRI, SAT, SUN //如果没有给赋值,就会按照顺序赋值
} day; // 表示 定义了一个枚举类型 enum Day ,同时定义了一个变量 day(类型是 enum DAY)
说明 FRI, SAT, SUN 就是 10, 11, 12
3) 枚举变量的定义的形式 1-先定义枚举类型,再定义枚举变量
enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;
4)枚举变量的定义的形式 2-定义枚举类型的同时定义枚举变量
enum DAY {
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
5) 枚举变量的定义的形式 3-省略枚举名称,直接定义枚举变量
enum {
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day; // 这样使用枚举,该枚举类型只能使用一次.
6) 可以将整数转换为对应的枚举值
不能直接将一个整数,赋给枚举变量,但是可以将整数,转成枚举类型,再赋给枚举变量.
enum SEASONS {
SPRING=1, SUMMER, AUTUMN, WINTER
}season;
int n = 4;
season = (enum SEASONS) n;
printf("season=:%d",season);