016 C语言基础:C语言枚举类型

一:引入

在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。

以每周七天为例,我们可以使用#define命令来给每天指定一个名字:

#include <stdio.h>
#define Mon 1
#define Tues 2
#define Wed 3
#define Thurs 4
#define Fri 5
#define Sat 6
#define Sun 7

int main(){
	int day;
	/*
	补充知识点:
		scanf函数称为格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量之中。scanf(“格式控制字符串”, 地址表列);
		其中,格式控制字符串的作用与printf函数相同,但不能显示非格式字符串,也就是不能显示提示字符串。地址表列中给出各变量的地址。地址是由地址运算符“&”后跟变量名组成的。
	*/
	scanf("%d", &day);
	switch(day){
		case Mon: puts("Monday"); break;
		case Tues: puts("Tuesday"); break;
		case Wed: puts("Wednesday"); break;
		case Thurs: puts("Thursday"); break;
		case Fri: puts("Friday"); break;
		case Sat: puts("Saturday"); break;
		case Sun: puts("Sunday"); break;
		default: puts("Error!");
	}
	return 0;
}
结果:
┌──(root💀kali)-[~/Desktop/c_test]
└─# ./meiju               
3
Wednesday

#define命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。

C语言提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。

 

二:枚举类型

枚举类型的定义形式为:
	enum typeName{valueName1, valueName2, valueName3, ...};
	enum week{Mon, Tues, Wed, Thurs, Fri, Sat, Sun}; 枚举默认从0开始,往后逐个加1
	enum week{Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sum = 7};
	还有一种更为简单的方法是只给第一个名字指定值:enum week{Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun};与上一行等效。
	
	枚举是一种类型,通过它可以定义枚举变量,enum week a, b, c;
	也可以在定义枚举类型的同时定义变量:enum week {Mon =1, Tues, Wed, Thurs, Fri, Sat, Sun} a, b, c;
	有了枚举变量,就可以把列表中的值赋给它:
		enum week{Mon =1, Tues, Wed, Thurs, Fri, Sat, Sun};
		enum week a = Mon, b = Wed, c = Sat;
	或者:enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;

实例:
	#include <stdio.h>
	int main(){
		enum week{Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun} day;
		scanf("%d", &day);
		switch(day){
			case Mon: puts("Monday");
			break;
			case Tues: puts("Tuesday");
			break;
			case Wed: puts("Wednesday");
			break;
			case Thurs: puts("Thursday");
			break;
			case Fri: puts("Friday");
			break;
			case Sat: puts("Saturday");
			break;
			case Sun: puts("Sunday");
			break;
			default: puts("error");
	   }
	   return 0;
	}
结果:
	┌──(root💀kali)-[~/Desktop/c_test]
	└─# ./meiju2
	6
	Saturday

需要注意的两点是:

  1. 枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。

  2. Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值