> 文档中心 > 【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)

【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记16--枚举)

目录

  • 枚举的定义
  • 枚举变量的定义
  • 枚举变量的初始化与赋值

使用枚举类型,可以提高程序代码的健壮性和可读性,并且枚举成员属于常量,甚至可以使用枚举成员名作为维的大小,来进行数组的定义

枚举的定义

定义枚举的格式为

enum 枚举名{枚举成员1,枚举成员2,...};

下面来定义一个和方向相关的枚举类型Dir

enum Dir{UP,DOWN,LEFT,RIGHT};

枚举成员属于常量,默认情况下,枚举成员是一个整型值,其第一个枚举成员的值为0,而后续枚举成员的值为其前一个枚举成员的值加1

printf("UP = %d\n",UP);printf("DOWN = %d\n",DOWN);printf("LEFT = %d\n",LEFT);printf("RIGHT = %d\n",RIGHT);

结果如下

UP = 0DOWN = 1LEFT = 2RIGHT = 3

也可以自己设置枚举成员的值

enum Dir{UP,DOWN = 10,LEFT,RIGHT};
printf("UP = %d\n",UP);printf("DOWN = %d\n",DOWN);printf("LEFT = %d\n",LEFT);printf("RIGHT = %d\n",RIGHT);

结果如下

UP = 0DOWN = 10LEFT = 11RIGHT =12

枚举成员是一个常量,可以将其作为定义数组的长度大小,也可以将其作为一个整型值初始化或赋值给一个整型变量,甚至将其作为表达式的一部分

enum Dir{UP,DOWN,LEFT,RIGHT};char arr[RIGHT];int i = UP;i = DOWN + 3;

枚举变量的定义

定义好枚举之后,就拥有了相应的枚举类型,可以根据这个枚举类型来定义相应的枚举变量。与结构体和联合体的变量定义方式类似,在定义枚举变量时,也可以采用以下3种不同的方式

(1)先定义枚举,再定义枚举变量

enum Dir dir1;

(2)在定义枚举的同时定义枚举变量

enum Dir{UP = -3,DOWN,LEFT,RIGHT}dir2;

(3)定义无名枚举类型的枚举变量

enum {UP = -3,DOWN,LEFT,RIGHT}dir3;

第一种方式可以定义出具有局部或全局作用域的枚举变量
第二种和第三种定义出来的都是具有全局作用域的枚举变量
由于第三种方式定义的是无名枚举类型,因此,只能在该枚举类型定义处直接定义枚举变量,在其它地方无法定义出该类型的枚举变量

枚举变量的初始化与赋值

在定义枚举变量的同时,可以对其进行初始化

enum Dir dir1 = LEFT;

也可以对枚举变量进行赋值操作

enum Dir dir2;dir2 = DOWN;

可以将枚举成员视为整型常量,而将枚举变量视为整型变量。因此,可以将一个整型值初始化或赋值给枚举变量

enum Dir dir = 2;dir = 1;

编写程序,用键盘上的W、S、A、D四个按键来表示上、下、左、右四个方向,当用户按下相应按键后,程序能够打印输出用户所选择的方向

#include #include enum Dir{UP,DOWN,LEFT,RIGHT};void printDirect(enum Dir dir){switch(dir){case UP:printf("The direction is UP.\n");break;case DOWN:printf("The direction is DOWN.\n");break;case LEFT:printf("The direction is LEFT.\n");break;case RIGHT:printf("The direction is RIGHT.\n");break;}}int main(){enum Dir dir;char ch;printf("Please determine a direction:\n");scanf("%c",&ch);ch = islower(ch) ? toupper(ch) : ch;switch(ch){case 'W':dir = UP;break;case 'S':dir = DOWN;break;case 'A':dir = LEFT;break;case 'D':dir = RIGHT;break;}printDirect(dir);return 0;}

主函数中,首先定义了两个变量,一个是枚举Dir类型的变量dir,一个是字符类型变量ch。在获取用户输入的字符后,将其保存至变量ch中,若用户输入的是小写字母,可以通过三目条件运算符,将存储在变量ch中的小写字母转换为大写字母。接着在switch语句中,当找到与变量ch匹配的case标签后,能够将一个正确的枚举成员赋值给枚举变量dir。最后,将枚举变量dir作为printDirect函数的实参,进行函数的调用

结果如下

Please determine a direction:aThe direction is LEFT.