引入

如果一个变量,我们只希望它的值在我们指定的值得范围内,例如week,我们只希望值在周一至周日之间,而不是星期八等特殊情况,我们就需要枚举类型。

枚举

如果一个变量,只有可能是几种类型的值,就可以定义为枚举类型。枚举就是把可能的值都列举出来,变量的值,只能在列举的这个值的范围内。
一般形式

enum 枚举类型名 {枚举元素列表}

使用枚举

我们来定义一个 weekday 变量类型

enum Weekday {sun , mon , tue , web , tuhe , fri , sat};
// 声明了一个枚举类型 Weekday , 枚举元素是sun~sat
enum Weekday workday;
// 定义了一个枚举类型变量 workday
workday = mon;  // 合法,mon 是枚举元素之一
workday =sat;  // 合法,sta 是枚举元素之一
workday = second;   //非法,second不是枚举元素之一

我们大概清楚了,枚举常量是由程序员来设计的,用什么名字代表什么含义,都是根据需要耳而定,但值必须是声明的枚举元素之一,否则非法。

注意

(1)C 编译时,枚举类型的元素是按照常量处理的,所以我们把枚举元素称为枚举常量。

sun =1 ; 
// 非法,我们不能对枚举常量赋值

(2)每一个枚举元素都代表一个整数,从0开始。

enum Weekday {sun , mon , tue , web , tuhe , fri , sat};
// 声明了一个枚举类型 Weekday , 枚举元素是sun~sat
enum Weekday workday;
//以下两种赋值方式都是合法的,结果相同
workday = mon;
workday =1;

我们可以直接赋值给枚举变量整数,它会自动从枚举元素中找到对应的常量。

(3)枚举元素可以用来做判断比较

if(workday==mon)
if(workday==1)
if(workday>mon)

因为枚举类型的值是整数,所以,以上都是合法的。

例子

五色球,取三次,取出的球都是不同色的搭配方案有多少种,输出所有的搭配方案。

#include <stdio.h>
enum Ball{red , yellow , blue , white , black};
enum Ball i,j,k,pri;
int n=0,loop;
int main(){
for(i=0;i<5;i++){
    for(j=0;j<5;j++){
        if(i!=j){
            for(k=0;k<5;k++){
                if (k!=i && k!=j){
                    n=n+1;
                    printf("第%d种", n);
                    for (loop=0;loop<3;loop++){
                        switch(loop){
                            case 0: pri=i;break;
                            case 1: pri=j;break;
                            case 2: pri=k;break;
                            default:break;
                        }
                        switch (pri){
                            case red:printf("  红");break;
                            case yellow:printf("  黄");break;
                            case blue:printf("  蓝");break;
                            case white:printf("  白");break;
                            case black:printf("  黑");break;
                            default:break;
                        }
                    }
                     printf("\n");
                }
            }
        }
    }
}
    printf("共有 %d 种取法\n", n);
    return 0;
}

输出

第1种 红 黄 蓝
第2种 红 黄 白
第3种 红 黄 黑
第4种 红 蓝 黄
第5种 红 蓝 白
第6种 红 蓝 黑
第7种 红 白 黄
第8种 红 白 蓝
第9种 红 白 黑
第10种 红 黑 黄
第11种 红 黑 蓝
第12种 红 黑 白
第13种 黄 红 蓝
第14种 黄 红 白
第15种 黄 红 黑
第16种 黄 蓝 红
第17种 黄 蓝 白
第18种 黄 蓝 黑
第19种 黄 白 红
第20种 黄 白 蓝
第21种 黄 白 黑
第22种 黄 黑 红
第23种 黄 黑 蓝
第24种 黄 黑 白
第25种 蓝 红 黄
第26种 蓝 红 白
第27种 蓝 红 黑
第28种 蓝 黄 红
第29种 蓝 黄 白
第30种 蓝 黄 黑
第31种 蓝 白 红
第32种 蓝 白 黄
第33种 蓝 白 黑
第34种 蓝 黑 红
第35种 蓝 黑 黄
第36种 蓝 黑 白
第37种 白 红 黄
第38种 白 红 蓝
第39种 白 红 黑
第40种 白 黄 红
第41种 白 黄 蓝
第42种 白 黄 黑
第43种 白 蓝 红
第44种 白 蓝 黄
第45种 白 蓝 黑
第46种 白 黑 红
第47种 白 黑 黄
第48种 白 黑 蓝
第49种 黑 红 黄
第50种 黑 红 蓝
第51种 黑 红 白
第52种 黑 黄 红
第53种 黑 黄 蓝
第54种 黑 黄 白
第55种 黑 蓝 红
第56种 黑 蓝 黄
第57种 黑 蓝 白
第58种 黑 白 红
第59种 黑 白 黄
第60种 黑 白 蓝
共有 60 种取法

枚举最重要的就是

  1. 可以当做数值使用,也可以进行判断
  2. 值只能在枚举元素中选择,不能超出这个范围或者直接赋值

尾巴

这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。