Упражнение 1-8. Напишите программу для подсчета пробелов, табуляции и новой строки

это упражнение по программированию K и R c, я не знаю, почему моя программа не работает, кто-нибудь может помочь, пожалуйста и спасибо.

Когда я запускаю программу, набираю пару слов и нажимаю Enter, она ничего не показывает, просто переходит на следующую строку и все.

#include <stdio.h>

int main()
{
     int c, line, tab, blank;
    
    line = 0;
    tab = 0;
    blank = 0;
    
    while ( (c = getchar()) != EOF)
    {
        if (c == '\n')
            ++line; 

        if (c == '\t')
            ++tab;

        if (c == ' ')
            ++blank;
       
    }
    
    printf("Lines: %d\n Tabs: %d\n Blanks: %d\n", line, tab, blank);

    return 0;
}

person Chihiro    schedule 17.11.2020    source источник
comment
И, пожалуйста, опишите проблему лучше, чем не работает. Дайте точный ввод, ожидаемый результат и фактический результат.   -  person kaylum    schedule 18.11.2020
comment
Что не работает? Неправильно считает, не кончается, вылетает, что? Я скомпилировал и запустил, без проблем.   -  person Weather Vane    schedule 18.11.2020
comment
OT: ваше форматирование предложений if очень странное и очень нечитаемое.   -  person Jabberwocky    schedule 18.11.2020
comment
@kaylum да, вы правы, извините за неясность, в основном, когда я запускаю программу, набираю пару слов и нажимаю «Ввод», она ничего не показывает, она просто переходит на следующую строку и все   -  person Chihiro    schedule 18.11.2020
comment
Вам нужно ввести EOF, который ищет программа: Ctrl-D в Linux, Ctrl-Z в Windows. Или направить файл на вход.   -  person Weather Vane    schedule 18.11.2020
comment
К вашему сведению, я отредактировал ваш код, чтобы показать вам стандартный способ отступов блоков кода. Каждый дочерний блок должен иметь отступ относительно родительского. И я не показывал этого, но рекомендуется заключать даже однострочные тела if с { }   -  person kaylum    schedule 18.11.2020
comment
@WeatherVane, не могли бы вы объяснить больше   -  person Chihiro    schedule 18.11.2020
comment
Хорошо, если вы запустите программу как program < textfile.txt, тогда содержимое этого текстового файла будет введено в stdin, а не с клавиатуры. В конце файла программа получает EOF, даже если в файле нет такого символа. В противном случае вы должны ввести его. Хотя винда капризная. Ctrl-Z должен быть сразу после ввода Enter, а затем должен быть введен еще один Enter.   -  person Weather Vane    schedule 18.11.2020
comment
@WeatherVane большое спасибо, теперь я понимаю, почему он ничего не показывает.   -  person Chihiro    schedule 18.11.2020
comment
@Jabberwocky Буду иметь в виду, спасибо   -  person Chihiro    schedule 18.11.2020
comment
@kaylum отметил, спасибо!   -  person Chihiro    schedule 18.11.2020


Ответы (1)


Как вы думаете, когда произойдет EOF, если вы читаете со стандартного ввода? Вам нужна либо обработка сигнала, либо завершающий символ.

person Erdal Küçük    schedule 17.11.2020