scanf
со спецификатором %s
сканирует строки, а не enum
с.Убедитесь, что вы понимаете все типы данных, с которыми вы работаете!
К сожалению, C на самом деле не заботится о реальных именах, которые вы назначаете enum
членам: они предназначены только для вашего собственного использования в качествепрограммист, и не может быть доступен самой программе.Попробуйте что-то вроде этого.
const char* names[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", NULL}; // The name of each day, in order
char buffer[16]; // A place to put the input
scanf("%15s", buffer); // Now `buffer` contains the string the user typed, to a maximum of 15 characters, stopping at the first whitespace
for(int i=0; names[i] != NULL; i++){ // Run through the names
if(strcmp(buffer, names[i]) == 0){ // Are these two strings the same?
printf("Day number %d \n", i+1); // Add one because you want to start with one, not zero
return;
}
}
printf("Sorry, that's not a valid day"); // We'll only get here if we didn't `return` earlier
Я сохранил названия дней недели в виде строк, к которым программа имеет доступ.Но для сравнения строк требуется функция strcmp
, а не простая ==
, поэтому я больше не могу использовать коммутатор и вместо этого должен использовать цикл.