C语言----枚举(进阶篇二十四)

 

  枚举的作用

    有一种变量类型,它的值只有固定的几种选择之一,比如性别(男、女)、硬币的两面(正、反)、星期(周一到周日)、居住省份(36个省市自治区名称)等等,这样的变量适合用enum枚举类型。

  使用枚举

    说明:

    ※自定义的类型一般都放在main函数前面,枚举也遵循这个规律:

    enum sex{boy,girl};

    main(){…}  

    ※枚举类型在定义时,系统会自动用整数为枚举的可用值从0开始用整数进行编号,如上面的boy的值为0,girl为1,也可以用printf(“%d”,gril)这样的语句输出。

 

    枚举值也可以叫做“符号常量”,有时候用英文单词组成的符号常量来代替简单的数字,会使程序的可读性大大提高。比如我们看到boy第一反应这就是男孩,而你看到数字0,并不知道这表示什么意思。

      可以通过赋值来改变枚举常量的值:

      enum color{red=4,green=1,blue,black};

      这条语句中从blue开始会自动往后递增,blue的值为2,black为3。

    ※不能给枚举常量赋值,比如boy=2,这是错误的写法。

    ※枚举常量相当于一个关键字,程序中不得出现与枚举常量相同的标识符。

    ※枚举支持所有的逻辑运算,也可以递增递减,比如上面的枚举类型color值为green,color++就得到blue,color+=2就得到black。有了这个规律,我们就用循环来处理枚举变量就非常方便。

 

    程序1

      箱子里有3种不同颜色(红绿蓝)的乒乓球若干个,请任意摸3个,如果摸到2个相同颜色的为二等奖,奖金1元,摸到3个相同颜色的为一等奖,奖金10元。

// 24-1枚举类型例子.c
//

#include <stdio.h>

enum color{red,blue,green};
main()
{
    enum color ball[3];
    int r;
    srand(time(0));    
    for (int i = 0; i < 3; i++)
    {
        r = rand() % 3;  
        switch (r)
        {
        case 0:
            ball[i] = red;
            break;
        case 1:
            ball[i] = blue;
            break;
        case 2:
            ball[i] = green;
            break;
        }
    }


    for (int i = 0; i < 3; i++)
    {
        switch (ball[i])
        {
        case red:
            printf("red ");
            break;
        case blue:
            printf("blue ");
            break;
        case green:
            printf("green ");
            break;
        }
    }
}

    枚举常量不支持直接的输入输出,因此,枚举变量经常会跟swith联用而达到直观的文字输出效果。

 

    我国规定周六和周日双休日,请输入一个星期几,由程序判断并输出这一天是否是休息日。

// 24-2枚举选择星期几.c

#include <stdio.h>
enum Week
{
    monday = 1,
    tuesday = 2,
    wednesday = 3,
    thursday = 4,
    friday = 5,
    saturday = 6,
    sunday = 7
}day;

main()
{
    int i;
    printf("请输入星期几,(数字 1~ 7 ,1代表星期一...7:星期日)\n");
    scanf_s("%d", &i);
    switch (i)
    {
    case 1:
        day = monday;
        break;
    case 2:
        day =tuesday;
        break;
    case 3:
        day = wednesday;
        break;
    case 4:
        day = thursday;
        break;
    case 5:
        day = friday;
        break;
    case 6:
        day = saturday;
        break;
    case 7:
        day = sunday;
        break;
    }


    switch (day)
    {
    case saturday:
    case sunday:
        printf("今天是休息日!");
        break;
    default:
        printf("今天是工作日!");
    }
}

 

上一篇:slice和splice的区别


下一篇:关于LaTeX