EOF чтение C / C ++ - PullRequest
       6

EOF чтение C / C ++

1 голос
/ 23 марта 2011

Я использую NetBeans MinGW для компиляции простых программ на c (я новичок в этом). Моя проблема в том, что у меня есть этот простой код

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int c,i=0;
    while((c=getchar())!=EOF){
        i++;
    }
    printf("%d",i);
    return 0;
}

и когда я пытаюсь завершить ввод, как это:

привет ^ Z [введите]

он этого не делает, мне нужно повторно ввести

^ Z [ввод]

до конца.

Буду признателен, если вы скажете мне, почему это происходит.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 23 марта 2011
Вход

C по умолчанию ориентирован на линию. Завершение строки символом EOF (^Z в Windows, ^D в Unix) завершает строку (без завершающей строки), но фактически не сигнализирует конец файла; условие конца файла сигнализируется, когда оно встречается при следующем чтении, то есть в начале строки.

1 голос
/ 23 марта 2011

То, как консоль обрабатывает ввод

Ctrl-Z в системе UNIX, было бы прерыванием, позволяющим приостановить процесс, поэтому я предполагаю, что это консоль Windows.

КогдаВы нажимаете Ctrl-Z после символов, вероятно, он рассматривает это как «Конец», который сам по себе является Ctrl-Z.

...