как работает этот код из "языка программирования C"? - PullRequest
1 голос
/ 20 мая 2009

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

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

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

Обновление

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

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

Ответы [ 4 ]

7 голосов
/ 20 мая 2009

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

4 голосов
/ 20 мая 2009

^ Z - EOF.

3 голосов
/ 20 мая 2009

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

program.exe < samplefile.txt

samplefile.txt записывается в стандартный вывод, а program.exe считывает это из стандартного вывода до достижения EOF.

1 голос
/ 20 мая 2009

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

...