как работает этот код из языка программирования C?

Я читаю "Язык программирования C" (2-е изд.), и в начале у него есть такие примеры:

while((c = getchar()) != EOF)
    if(c == '\n'){
        ++n1;

Я вижу, как это будет работать при чтении из файла, и я понимаю этот синтаксис... Но это просто чтение из консоли - как сигнализируется конец файла при вводе символов из консоли? Я использую Windows XP... Компилятор MinGW... В любом случае, была ли эта книга написана для более ранних систем с кнопкой EOF или чем-то подобным?

Обновлять

хорошо, у меня есть еще один вопрос, который как раз связан с тем, как конец файла работает под Windows.

Если я просто while(getchar()!=EOF);, то я могу просто продолжать вводить символы, пока не сообщу EOF через ^Z. Но я должен написать новую строку, затем нажать ^Z, затем еще одну новую строку... Почему это должно быть на отдельной строке?


person Carson Myers    schedule 20.05.2009    source источник
comment
Убедитесь, что вы объявляете c как int, а не char!   -  person pmg    schedule 19.10.2009


Ответы (3)


Windows использует Ctrl-Z для EOF, а UNIX использует Ctrl-D. См. http://bytes.com/groups/c/217873-eof-windows и отличный выбор книг. :)

person Matthew Flaschen    schedule 20.05.2009
comment
Спасибо! Ха-ха, и я получил его на свой день рождения, но я не мог дождаться, поэтому скачал его и заглянул. Но OCR считывает некоторые слова и буквы так неправильно, а некоторые страницы не загружаются, так что это не на 100% потрясающий опыт, и я чувствую, что пропускаю много информации. - person Carson Myers; 20.05.2009
comment
Я должен ждать около месяца, вот и все. - person Carson Myers; 20.05.2009

Правильный ответ уже был дан, но типичным использованием будет перенаправление файла на стандартный вывод:

program.exe < samplefile.txt

samplefile.txt "записывается" на стандартный вывод, а program.exe считывает его со стандартного вывода до тех пор, пока не будет достигнут EOF.

person Dirk Vollmar    schedule 20.05.2009
comment
Просто для ясности - в файле для текстовых файлов нет EOF - он предоставляется ОС при чтении после конца текста в файле. - person ; 20.05.2009
comment
@Neil: Спасибо за разъяснение, вы совершенно правы. Я обновил формулировку, чтобы избежать недоразумений. - person Dirk Vollmar; 20.05.2009

Что касается вашего вопроса о ^Z, причина, по которой он ведет себя так, заключается в том, что на самом деле это не символ, а сигнал от операционной системы к системе ввода C. Таким образом, он сильно зависит от взаимодействия между ОС и буферизацией системы ввода C. Это причудливый способ сказать, что это просто то, как все работает, для Windows и для вашей конкретной реализации C.

person Community    schedule 20.05.2009