【枚举的定义;枚举变量的定义、初始化和赋值】(学习笔记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.