Я делаю эту программу с помощью операторов switch, которые будут назначать оценки букв на основе того, будет ли пользователь вводить числа 0 - 10. Если пользователь вводит номер, который не равен 0-10, программа выводит сообщение об ошибке и имеет пользователя повторный ввод. Однако, если пользователь вводит символ, программа будет зацикливаться на случай по умолчанию. Я хочу, чтобы он выводил сообщение об ошибке из случая по умолчанию один раз и заново вводил их, если они вводят символ. Я не уверен, почему он зацикливает случай по умолчанию, когда вводится символ.Почему моя программа не маркирует символы?
#include <stdio.h>
int main()
{
int grade;
int r;
while((r = scanf("%i", &grade)) != EOF)
{
switch(grade)
{
case 10:
case 9:
printf("Your grade is an A\n");
break;
case 8:
printf("Your grade is a B\n");
break;
case 7:
printf("Your grade is a C\n");
break;
case 6:
printf("Your grade is a D\n");
break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:
printf("Your grade is an F\n");
break;
default:
printf("Invalid score, please re-enter\n");
}
}
return 0;
}
Подсказка: что возвращает 'scanf', если вы введете что-то недействительное? (Вы можете найти это, прочитав документацию) – immibis
Вы сохраняете возвращаемое значение 'scanf' в' r' (это хорошо), но тогда вы проверяете его только на 'EOF'. Если пользователь вводит то, что не может быть преобразовано в число, 'r' будет равно нулю, в противном случае. –
Тест должен быть '== 1', а не'! = EOF' –