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;