здесь фрагмент кода, который должен циклически повторяться до тех пор, пока пользователь не введет число от 0 до 15
int input;
do
{
printf("Enter a number => ");
scanf("%d",&input);
printf("\n %d \n",input);
}
while (!(input>0 && input <15));
Однако если пользователь вводит что-то вроде «gfggdf», это приводит кцикл повторяется снова и снова и снова и никогда не запрашивает у пользователя ввода снова ... консоль выглядит так
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
Enter a number =>
0
(looping indefinitely)
После просмотра этой книги мне кажется, что мне нужно сделать что-то подобное, чтобы предотвратить этоне происходит.
int input, error, status;
char skip_ch;
do
{
error = 0;
printf("Enter a number => ");
status = scanf("%d",&input);
printf("\n %d \n",input);
if(status!=1)
{
error=1;
}
else if(input < 0 || input >15){
error = 1;
}
do
{
scanf("%c",&skip_ch);
}while(skip_ch != '\n');
}
while (error);
Я понимаю необходимость проверки состояния scanf, чтобы убедиться, что это был допустимый ввод. Что я не понимаю во внутреннем цикле do-while.Я чувствую, что книга никогда не объясняла мне, почему scanf нужно вызывать несколько раз таким образом, как будто буфер scanf заполнен кучей мусора, и он каким-то образом очищает его, просто просматривая его миллион раз дляВы.
Может кто-нибудь объяснить мне эту черную магию?