码迷,mamicode.com
首页 > 其他好文 > 详细

C零基础视频-43-枚举

时间:2019-10-17 23:50:32      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:菜单   零基础   编译   int   return   没有   har   指定   cas   

标志变量

在某些编程情况下,我们可能会根据某个变量出现多分支情况,我们常使用一个标志变量存储分支的状态,如:

#include <stdio.h>


int main(int argc, char* argv[])
{
    int nChoice = -1;
    scanf("%d", &nChoice);
    switch (nChoice)
    {
    case 0:
        printf("选择0号菜单,运行增加功能……\r\n");
        break;
    case 1:
        printf("选择1号菜单,运行删除功能……\r\n");
        break;
    case 2:
        printf("选择2号菜单,运行查询功能……\r\n");
        break;
    }
    return 0;
}

枚举

但是,单纯的数字的可读性并不好,这时,我们可以采用枚举变量,增强可读性。
枚举的关键字是enum,同struct、union类似,我们需要定义出新的枚举类型,再用枚举类型去定义枚举变量。

#include <stdio.h>

enum FLAG_CHOICE{
    ADD,
    DEL,
    QUERY
};

int main(int argc, char* argv[])
{
    FLAG_CHOICE myChoice;
    return 0;
}

可以看出,使用enum声明类型时,同时需要声明这个类型下支持的各种“状态”。
之后定义的枚举变量,将只能被限定的状态赋值:

#include <stdio.h>

enum FLAG_CHOICE{
    ADD,
    DEL,
    QUERY
};

int main(int argc, char* argv[])
{
    FLAG_CHOICE myChoice;
    myChoice = ADD; //合法
    myChoice = DEL; //合法
    myChoice = QUERY; //合法

    myChoice = 5; //非法
    return 0;
}

使用枚举,可以使得代码的可读性增强:

#include <stdio.h>

enum FLAG_CHOICE{
    ADD,
    DEL,
    QUERY
};

int main(int argc, char* argv[])
{
    FLAG_CHOICE myChoice;
    scanf("%d", &myChoice);

    switch (myChoice)
    {
    case ADD:
        printf("增加功能...\r\n");
        break;
    case DEL:
        printf("删除功能...\r\n");
        break;
    case QUERY:
        printf("查询功能...\r\n");
        break;
    }
    return 0;
}

枚举的本质是数字

从以上代码中可以看到

    FLAG_CHOICE myChoice;
    scanf("%d", &myChoice);

这是可以编译通过的,因为枚举的本质其实就是整型类型。
只不过定义枚举类型后,编译器会做两件事情:

  • 在枚举类型声明时,将个状态转为数字(从下标0开始)
  • 在枚举变量赋值时,会做强制类型检查,枚举类型声明时没有的状态(数字),不得赋值

正因为如此,枚举类型声明时,还可以指定数字编号。

enum FLAG_CHOICE{
    ADD = 2,
    DEL = 1,
    QUERY = 0
};

C零基础视频-43-枚举

标签:菜单   零基础   编译   int   return   没有   har   指定   cas   

原文地址:https://www.cnblogs.com/shellmad/p/11695682.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!