Icer-newer

1.枚举类型

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

enum 枚举名 {枚举元素}

1.1 实例1

使用枚举表示一个星期

// 传统方法
#define MON 1;
#define TUE 2;
#define WeD 3;
#define THU 4;
#define FRI 5;
#define SAT 6;
#define SUN 7;
#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,可采用下述任一种方式:

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 枚举类型取别名

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

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

weekday today, tomorrow;		//枚举类型的变量,即enum weekday类型

// typeof使用的时候不可以省略别名
typedef enum 	//省略枚举名
{
	Mon = 0,
	Tues,
	Wed,
	Thurs,
	Fri,
	Sat,
	Sun
}weekday;				//此处的weekday为枚举类型的别名

weekday today, tomorrow;		//枚举类型的变量,即enum weekday类型

  • 不能定义同名的枚举类型
  • 不能包含同名的枚举成员

1.3 枚举类型的遍历

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

#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.4 枚举类型在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("你没有选择你喜欢的季节");
    }
    getchar();
    getchar();
  
}

相关文章: