C 中带有 switch-case 的枚举用法
Enum usage with switch-case in C
#include <stdio.h>
#include <stdlib.h>
enum gender {male, female};
int main () {
enum gender choice;
printf("Your gender: ");
scanf("%u", &choice);
switch(choice)
{
case male: printf("You're a man."); break;
case female: printf("You're a woman."); break;
default: printf("Try again.");
}
return 0;
}
无论我向控制台写什么,它都会向我显示 'male' 案例,“你是个男人。”。我试过用引号和单引号来写 case's 但它不起作用。你能帮助我吗?这是我的第一个问题,如果我有任何错误,我也很抱歉我的英语。
来自 C 标准(6.7.2.2 枚举说明符)
4 Each enumerated type shall be compatible with char, a signed integer
type, or an unsigned integer type. The choice of type is
implementation-defined,128) but shall be capable of representing the
values of all the members of the enumeration.
表示枚举类型的对象在内部不需要存储为int或unsigned int类型的对象。它可以作为 char 类型的对象在内部存储。
所以这个scanf的调用
scanf("%u", &choice);
调用未定义的行为。
您需要使用类型为 unsigned int 的中间变量,并在使用此变量调用 scanf 后将其整数值分配给对象选择。
另一种方法是例如声明一个 char 类型的对象,并要求用户输入 'm' 表示男性或 'f' 表示女性 之后您可以将其转换为值0 或 1。
例如
char c = 0;
scanf( "%c", &c );
if ( c == 'm' ) c = 0;
else if ( c == 'f' ) c = 1;
else c = 2;
choice = c;
#include <stdio.h>
#include <stdlib.h>
enum gender {male, female};
int main () {
enum gender choice;
printf("Your gender: ");
scanf("%u", &choice);
switch(choice)
{
case male: printf("You're a man."); break;
case female: printf("You're a woman."); break;
default: printf("Try again.");
}
return 0;
}
无论我向控制台写什么,它都会向我显示 'male' 案例,“你是个男人。”。我试过用引号和单引号来写 case's 但它不起作用。你能帮助我吗?这是我的第一个问题,如果我有任何错误,我也很抱歉我的英语。
来自 C 标准(6.7.2.2 枚举说明符)
4 Each enumerated type shall be compatible with char, a signed integer type, or an unsigned integer type. The choice of type is implementation-defined,128) but shall be capable of representing the values of all the members of the enumeration.
表示枚举类型的对象在内部不需要存储为int或unsigned int类型的对象。它可以作为 char 类型的对象在内部存储。
所以这个scanf的调用
scanf("%u", &choice);
调用未定义的行为。
您需要使用类型为 unsigned int 的中间变量,并在使用此变量调用 scanf 后将其整数值分配给对象选择。
另一种方法是例如声明一个 char 类型的对象,并要求用户输入 'm' 表示男性或 'f' 表示女性 之后您可以将其转换为值0 或 1。
例如
char c = 0;
scanf( "%c", &c );
if ( c == 'm' ) c = 0;
else if ( c == 'f' ) c = 1;
else c = 2;
choice = c;