Подсчет символов, строк и слов на языке C

Программа считает количество введенных пользователем символов, строк и слов. Чтобы программа корректно закончила работу и правильно посчитала, после набора строк надо перейти на новую строку, после чего нажать Ctrl + D (в терминале Linux) или Ctrl + Z (в Windows).

  1. Программа будет работать до тех пор, пока не будет получен сигнал окончания потока ввода - EOF (подробнее в уроке "Посимвольный ввод и вывод").
  2. Если очередной символ - это переход на новую строку, то увеличиваем значение переменной, хранящей количество строк.
  3. Иначе - увеличиваем счетчик символов.
  4. Для подсчета слов используем специальную переменную-флаг, отрицательное значение которой обозначает нахождение вне слова (когда вводятся пробелы, символы перехода на новую строку, не начат ввод слова).
  5. Если вводится пробел или символ перехода на новую строку, значит ввод слова был окончен, и следует сбросить флаг.
  6. Иначе (когда вводится любой другой символ) если флаг сброшен, то начинается ввод нового слова. Значит, надо увеличить счетчик слов и установить флаг, чтобы сигнализировать о нахождении внутри слова.
#include <stdio.h>

int main() {
    char ch, flag = -1;
    unsigned c = 0;  // символы
    unsigned w = 0;  // слова
    unsigned n = 0;  // строки

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

        if (ch == ' ' || ch == '\n')
            flag = -1;
        else if (flag == -1) {
            flag = 1;
            w++;
        }
    }

    printf("Символы: %u\n", c);
    printf("  Слова: %u\n", w);
    printf(" Строки: %u\n", n);
}
one two
three
four
Символы: 16
  Слова: 4
 Строки: 3