этот код должен читать положительное число, и если пользователь вводит нечисловое значение, он снова просит его ввести число и ждать ввода для повторной проверки до ввода числа
do
{
printf("Enter a positive number: ");
}
while ( (scanf("%d%c", &n,&c) != 2 || c!='\n' || n<0) ) ;
но на самом деле при вводе нечислового числа он продолжает выполнять тело цикла while, не читая ожидание, чтобы проверить состояние цикла while while(scanf("%d%c", &n,&c) != 2 || c!='\n' || n<0)
при редактировании условия на
int clean_stdin()
{
while (getchar()!='\n');
return 1;
}
do
{
printf("Enter a positive number: ");
}
while ( (scanf("%d%c", &n,&c) != 2 || c!='\n' || n<0) && clean_stdin() ) ;
Он выполняется правильно, но я не понимаю, зачем нам добавлять getchar()
, хотя мы уже используем scanf()
в условии
getch
не является стандартным, Ваш код все равно его не использует. - person too honest for this site   schedule 03.07.2017%d
очищает все начальные пробелы во входном буфере,clean_stdin
необходим для учета регистра, когда вы вводили, скажем,123z
. - person Weather Vane   schedule 03.07.2017