#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; }No importa lo que escriba en la consola, me muestra el caso 'masculino', 'Eres un hombre'. He intentado escribir casos con comillas y comillas simples, pero no funciona. ¿Me puedes ayudar? Esa es mi primera pregunta aquí y también lo siento por mi inglés si tuve algún error.
Del Estándar C (6.7.2.2 Especificadores de enumeración)
4 Cada tipo enumerado debe ser compatible con char, un tipo entero con signo o un tipo entero sin signo. La elección del tipo está definida por la implementación, 128) pero debe ser capaz de representar los valores de todos los miembros de la enumeración.
Significa que internamente un objeto de un tipo de enumeración no es necesariamente almacenado como un objeto del tipo int o unsigned int. Puede almacenarse internamente como un objeto del tipo char.
Así que esta llamada de scanf
scanf("%u", &choice);invoca un comportamiento indefinido.
Debe usar una variable intermedia del tipo unsigned int y después de la llamada de scanf con esta variable, asigne su valor entero a la elección del objeto.
Otro enfoque es, por ejemplo, declarar un objeto del tipo char y pedirle al usuario que ingrese 'm' para hombre o 'f' para mujer. Después de eso, puede convertirlo al valor 0 o 1.
Por ejemplo
char c = 0; scanf( "%c", &c ); if ( c == 'm' ) c = 0; else if ( c == 'f' ) c = 1; else c = 2; choice = c;