Я написал короткую программу для проверки чтения текстовых файлов из stdin
:
int main(){
char c;
while(!feof(stdin)){
c = getchar(); //on last iteration, this returns '\n'
if(!isspace(c)) //so this is false
putchar(c);
//remove spaces
while (!feof(stdin) && isspace(c)){ //and this is true
c = getchar(); // <-- stops here after last \n
if(!isspace(c)){
ungetc(c, stdin);
putchar('\n');
}
}
}
return 0;
}
Затем я передаю ему небольшой текстовый файл:
jimmy 8
phil 6
joey 7
с последней строкой (joey 7
), заканчивающейся символом \n
.
Моя проблема в том, что после того, как он прочитает и напечатает последнюю строку, а затем вернется к проверке ввода, больше не будет символов для чтения, и он просто остановится на строке, отмеченной в блоке кода.
Вопрос. Единственный способ для feof()
вернуть true - это после неудачного чтения, как указано здесь: Обнаружение EOF в C< /а>. Почему последний вызов getchar
не запускает EOF и как мне лучше обработать это событие?
getchar()
(которое возвращаетint
, а неchar
) и протестировать его для EOF. Проверкаfeof()
как условия оператораwhile()
почти всегда неверна. - person r3mainer   schedule 04.09.2016getchar
по-прежнему терпит неудачу, когда нетchar
для получения. Он просто висит там. - person corporateWhore   schedule 04.09.2016< text.txt
- person corporateWhore   schedule 04.09.2016while(!feof(fp))
глупость, должна быть сожжена. Миллионы студентов были введены в заблуждение. - person Weather Vane   schedule 04.09.2016