Почему я получаю сообщение об ошибке в два раза / втрое... если я даю более 1 символов
Я пытаюсь написать код, который читает из стандартного ввода пользователя, а также проверить ввод, если это целое число или нет.
это моя функция:
int Test(int *integer)
{
int input = *integer;
int check;
do
{
check = scanf("%d", &input);
if(check == 1) // return value should be 1
{
*integer= input;
break;
}
else
{
printf("Error Message")
}
}while(check!=1 && getchar() != '\n');
return 0;
}
главный:
int digit = 0;
Test(&digit);
например, если я ввожу "а", это просто выдаст мне 1 "сообщение об ошибке" и попросит ввести снова, но если я введу "fooooo", то выдаст 5 или более сообщений об ошибках, а затем попросит ввести снова. Кто-нибудь знает в чем проблема?
1 ответ
Вы можете исправить вашу программу, просто выполнив это:
else {
printf("Error Message");
while(getchar() != '\n');
}
Причина, по которой ваш код не удался: если ввод не является числом, преобразование будет прервано и в буфере останутся символы. Следующий раунд будет потреблять один символ за раз, пока не останется ни одного.
Приведенный выше цикл while будет читать из буфера до новой строки и, таким образом, эффективно очищать буфер от нежелательных символов.