Невозможно напечатать количество символов с помощью getchar в Ubuntu

Я новичок в C и Ubuntu. Я написал очень простую программу для подсчета количества символов с помощью while и getchar(). Программа:

#include <stdio.h>

main()  {

    int i;
    int c= 0;

    while ( ( i = getchar() ) != EOF ){
        c++ ;
    }
    printf( "%d characters\n" , c) ;

    return 0;
}

Я сохранил его и скомпилировал с помощью gcc c1.c -o c1. Об ошибках не сообщалось. Я выполнил программу, используя ./c1. Я ввожу ввод как daniweb, затем нажимаю ввод, но отображается счетчик. Что пошло не так? Это бесконечный цикл? Как getchar() определяет EOF, когда ввод осуществляется с клавиатуры?


person royal    schedule 19.07.2012    source источник
comment
Счетчик отображается или счётчик не отображается? Попробуйте нажать Control-D, когда закончите вводить текст.   -  person Paul R    schedule 19.07.2012


Ответы (2)


На терминале вы можете отправить EOF в приложение, нажав Ctrl + D. Вы также можете сделать что-то вроде этого:

echo "blablub" | ./yourprogram

Чтобы посчитать, сколько персонажей в blablub. В этом случае EOF отправляется автоматически.

person timos    schedule 20.07.2012

Нажатие Enter отправляет в вашу программу новый строчный символ, а не EOF. Как уже упоминалось другими, используйте Ctrl + D для отправки EOF. Если вы хотите прекратить чтение символов в новой строке, измените свой цикл while на это:

while ( ( i = getchar() ) != '\n' ){
c++ ;
}
person Trevor Forentz    schedule 28.11.2012