#c
Вопрос:
У меня есть программа, которая должна принимать входные данные до EOF, и поскольку это задание, я вынужден использовать scanf. Я делаю что-то подобное в основной функции:
while (1){
int x;
int s=scanf("%d",amp;x);
if (x==EOF){
break;
}
if(s==0){
fprintf(stderr, "Non integer value input.");
return 1;
}else if(something){...}
}
return 0;
Но если я нажму ^D, программа перейдет в бесконечный цикл вместо выхода с 0, и иногда я просто продолжаю видеть ^D на терминале. Как я могу это исправить?
Другой подход, который я попробовал, выглядел примерно так:
char c;
if (c==EOF){
break;
}
int x=c 0;
PS Я также пытался выполнить while(x!=EOF) и while (!EOF) для цикла, но это тоже не работает.
Комментарии:
1. EOF не является входным значением. Это возвращаемое значение из некоторых
stdio
функций, таких как, err,scanf()
. Вы ищете его не в том месте.2. @user207421 Я также пытался, пока(!EOF) не могли бы вы, пожалуйста, уточнить, как это сделать, так как это тоже не сработало.
3. Это имеет еще меньше смысла, и это, безусловно, не имеет ничего общего с тем, что я сказал выше. Подумайте об этом. Где вы храните возвращаемое значение
scanf()
? и, следовательно, какую переменную вы должны проверять на равенство с EOF?4. Ааа, понял, извини, я догадался, спасибо! Я должен делать, если (s==EOF).
Ответ №1:
Сравните результат, возвращаемый scanf
параметром EOF, а не параметром out, который получает введенное входное значение.
То есть замените это:
int s = scanf("%d", amp;x);
if (x == EOF) {
break;
}
С этим:
int s = scanf("%d", amp;x);
if (s == EOF) {
break;
}