int c;
c = getchar();
while(!feof(stdin) && !ferror(stdin)) {
...
c = getchar();
}
Вы должны быть осторожны, чтобы учесть влияние конца файла или ошибки на любые тесты, которые вы делаете для этих значений.Рассмотрим этот цикл, предназначенный для сканирования всех символов до следующего полученного символа пробела:
int c;
c = getchar();
while(!isspace(c)) {
...
c = getchar();
}
Если EOF возвращается до того, как какой-либо пробел обнаружен, этот цикл может никогда не завершиться (так как это не символ пробела),Лучший способ написать это:
int c;
c = getchar();
while(!feof(stdin) && !ferror(stdin) && !isspace(c)) {
...
c = getchar();
}
Наконец, стоит отметить, что, хотя EOF обычно равен -1, все стандартные обещания состоят в том, что это отрицательная целочисленная константа с типом int.