枚举类型
枚举类型定义了一组整型常量的集合,目的是提高程序的可读性
它的语法跟结构体的语法相同。
枚举类型定义:
我们先来举出生活中的例子,例如一个孩子过生日,父亲问孩子需要什么生日礼物,1代表篮球,2代表足球,3代表排球4代表乒乓球…………
那么1,2,3,4,…………就是提供了一组常量的别名可供选择,在程序里面就是要便于程序清晰可读。
定义:
enum DAY
{
MON, TUE, WED, THU, FRI, SAT, SUN
};
(1)枚举型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量,元素之间用 逗号(,)隔开。
(2) 第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。
(3) 可以人为设定枚举成员的值,从而自定义某个范围内的整数。
(4) 枚举型是预处理指令#define 的替代。
枚举变量与初始化
#include <stdio.h>
enum DAY
{
MON = 1,TUE,WED,THU,FRI,SAT,SUN
};
int main()
{
printf("%d, %d, %d, %d, %d, %d, %d\n",
MON, TUE, WED, THU, FRI, SAT, SUN);
enum DAY day = MON;
printf("day = %d\n",day);
return 0;
}
打印结果为:
我们在这里对于C语言和C++进行一个区分:
#include <stdio.h>
enum DAY
{
// 1 2 3 4 5 6 7
MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
printf("%d, %d, %d, %d, %d, %d, %d\n",
MON, TUE, WED, THU, FRI, SAT, SUN);
enum DAY day = MON;
day = 101;
printf("day = %d\n", day);
return 0;
}
以上代码,在C语言中我们定义了一个枚举类型定义了变量day这里我们可以允许day赋值定义的enum DAY里面 1~7之外的成员,就是说101不在enum DAY定义的访问内。
但是在C++里面,day的赋值必须是枚举类型里面的成员,不可以是枚举类型里面之外的成员。就上面例子来说day = 101;是不可以的,day = MON是没有问题的。
简单理解就是在C语言里面定义的枚举类型的变量可以选择给出的枚举内部变量之外的,但是C++定义的枚举类型的变量只能选择给出的内部变量。
下面我们打印所有枚举类型对应的整型变量:
#include <stdio.h>
enum DAY
{
// 1 2 3 4 5 6 7
MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
printf("%d, %d, %d, %d, %d, %d, %d\n",
MON, TUE, WED, THU, FRI, SAT, SUN);
enum DAY day = MON;
printf("day = %d\n", day);
return 0;
}
打印结果为:
枚举常量
在使用过程中,枚举常量,应用更广泛,提高程序的可读性。常用于出错处理的枚举,枚举类型的每一个成员都是一个常量,不允许在其他函数中进行修改。
枚举类型应用实例
判断一年中第 125 天是工作日,还是休息日?假设一年 365 天,新年第一天是星期一。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
enum DAY
{
// 1 2 3 4 5 6 7
MON = 1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
unsigned int today;
printf("Pls input today Num:");
scanf("%d", &today);
today = today % 7;
enum DAY day = today;
// enum 常用于给 case 语句提供一类方便的标签。
switch (day)
{
case MON:
case TUE:
case WED:
case THU:
case FRI:
printf("today is workday\n");
break;
case SAT:
case SUN:
printf("today is holiday\n");
break;
}
return 0;
}
打印结果为:
在C99之后的C语言中才直接支持bool类型,之前的版本在使用的时候都需要通过枚举定义:
typedef enum BOOLEN
{
false,
true
}Bool;
Bool a = true;
类型大总结
至此,我们完成了 c 语言完成了所有类型的学习。类型对我们的意义是什么呢? 内存是以字节为单位进行线性编址的硬件基础,类型是对内存的格式化。