C语言——enum(枚举)

1. 枚举语法定义格式

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
};

2. 枚举的使用规则

枚举默认第一个枚举成员的值为整型的 0,后续枚举成员的值在前一个成员上加 1。这里定义了MON为1,那么第二个TUE就为 2,WED就是3,以此类推。

也可以这样:

enum DAY
{
      MON, TUE, WED, THU=0, FRI, SAT, SUN
};

上面的MON为0、TUE为1、WED为2,因为THU自定义负值了0,所以FRI为1,以此类推。

3. 定义枚举变量。

3.1 先定义枚举类型,再定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
enum DAY day;

3.2 定义枚举类型的同时定义枚举变量

enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

3.3 省略枚举名称,直接定义枚举变量

enum
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

4. 规则验证

#include <stdio.h>

int main()
{
    enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;

	printf("请输入数字:  ");
    scanf("%d", &day);

    switch(day)
	{
        case Mon: 
			printf("Today is Monday!\n"); 
		break;

        case Tues: 
			printf("Today is Tuesday!\n"); 
		break;

        case Wed: 
			printf("Today is Wednesday!\n"); 
		break;

        case Thurs: 
			printf("Today is Thursday!\n"); 
		break;

        case Fri: 
			printf("Today is Friday!\n"); 
		break;

        case Sat: 
			printf("Today is Saturday!\n"); 
		break;

        case Sun: 
			printf("Today is Sunday!\n"); 
		break;

        default: 
			printf("Error!\n");
    }

    return 0;
}

例子可以看出,枚举的各常量的值,确实是依次往后加1的;这里的枚举变量和普通变量区别就在于取值范围,枚举变量只能取枚举内部定义到的值,和普通变量相同的是枚举变量的使用,也需要赋值,所以在我平时的实际应用中,很少直接用到上述的定义方式,而是通过typedef做类型定义。例如:

typedef enum WEEK{
    MON = 1, 
    TUE = 2, 
    WED = 3, 
    THU = 4, 
    FRI = 5, 
    SAT = 6, 
    SUN = 7,
} week_e;
typedef enum CLASS
{ 
    noClass = 0,
    haveClass = 1,
}class_e;

常用在函数传递参数,做参数类型及取值的限定,例如:

#include <stdio.h>

typedef enum WEEK{
    MON = 1, 
    TUE = 2, 
    WED = 3, 
    THU = 4, 
    FRI = 5, 
    SAT = 6, 
    SUN = 7,
} week_e;

typedef enum CLASS
{ 
    noClass = 0,
    haveClass = 1,
}class_e;

void day_of_week(week_e todayData, class_e classHave)
{
	if(todayData != SAT && todayData != SUN && classHave == haveClass)
	{
	    printf("Class is required today!\n");
	}
	else
	    printf("Today is a happy day!\n");
}

int main()
{
	week_e today;
	class_e classHave;

	printf("Please enter today's date: ");
	scanf("%d", &today);
	if(today == MON || today == TUE || today ==THU || today == FRI)
	{
		classHave = haveClass;
	}
	else 
		classHave = noClass;

        day_of_week(today, classHave);
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值