2014-10-25 5 views
0

Я практиковал C программу, я прочитал от The C ANSI Programming Language Second Edition я узнаю о getchar() function.And книги говорят, что getchar() читать символ из стандартного ввода до символа новой строки или EOF был reached.And в книге Я пытаюсь переписать программу для подсчета символов с помощью функции getchar().Конфигурация при компиляции. Проблема заключается в том, что код не может отображать длинный символ.GetChar() функция и EOF

Вот код:

#include <stdio.h> 

int main (void){ 
    long nc; 

    nc=0; 
    while(getchar()!=EOF) 
     nc++; 
    printf("%ld\n",nc); 

    return 0; 
} 

Но когда я изменить EOF на символ новой строки \n код работает, как я ожидал, но только дисплей длинный характер только одна линия. После этого код завершается.

Мой вопрос: EOF точно есть и в чем разница между EOF и символом новой строки.

Есть ли другой способ исправить эту программу?

+1

Как вы ввели? try' ./a.out BLUEPIXY

+0

Это работает на меня. Но почему мы должны нажимать Ctrl + D, вы можете мне объяснить? Я все равно использую Linux. – harianja

+1

CTRL + D вводится как EOF (вход несимвольный). – BLUEPIXY

ответ

3

getchar() возвращает EOF, когда вы добираетесь до конца файла. Он возвращает \n, когда вы добираетесь до конца строки. Вот почему ваша петля заканчивается, когда она доходит до конца строки, если вы замените EOF на \n.

+0

Можете ли вы объяснить мне, почему при использовании 'EOF' программа не отображает результат другими словами длинный входной символ? – harianja

+1

Извините, я не знаю, что вы подразумеваете под «длинным характером». В версии «EOF» выводится общее количество символов в файле; в версии '\ n' отображается номер в первой строке. –

1

EOF означает End of File, и вы получите это, когда добрались до конца файла с getchar(). Вы получаете \n, когда вы добираетесь до конца строки.

Теперь, когда Вы хотите его, так что он печатает текст снова использовать это:

#include <stdio.h> 

int main(void) { 
    int c, nc = 0; 

    while ((c = getchar()) != '\n') { 
     nc++; 
     putchar(c); 
    } 

    printf("%d\n",nc); 

    return 0; 

} 
1

EOF конец файла. Это не значит конец вашего «длинного символа». Если вы просто набираете много символов, занимающих несколько строк на экране командной строки, программа по-прежнему не получает EOF, если вы не наберете Ctrl + D, имитирующий конец файла. Когда вы меняете EOF на «\ n», программа требует окончания строки. И когда вы закончите первую строку, программа получит конец первой строки и запустится. Вот почему код работает так, как вы ожидали, но отображаете только длинный символ только одной строки.

Смежные вопросы