Не могу разобраться с EOF - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Требуется написать программу для подсчета пробелов,знаков табуляции и знаков конца строки. Суть проблемы в следующем:собственно когда я заканчиваю ввод (ctrl+Z) то у меня в этой строке появляется ^Z и если до ^Z были символы ,то просто переходит на новую строку ,не выдавая ответ,если на пустой строке зажать ctrl+Z то опять же появляется ^Z и выдает ответ 0 0 0. Как мне обозначить правильно конец файла,чтобы получился верный ответ? P.S ctrl+D не помогает
#include<stdio.h>
main() {
    int p = 0, t = 0, n = 0, c;
    while (с = getchar() != EOF) {
        if (с == ' ')
            ++p;
        if (с == '\t')
            ++t;
        if (с == '\n')
            ++n;
    }
    printf("%d %d %d\n", p, t, n);
 
}

Решение задачи: «Не могу разобраться с EOF»

textual
Листинг программы
while (с = getchar() != EOF)

Объяснение кода листинга программы

В представленном коде выполняется следующая последовательность действий:

  1. с = getchar(); — в этом выражении функция getchar() используется для чтения символа из стандартного ввода (обычно это клавиатура). Результат этого действия сохраняется в переменной с.
  2. != — это оператор сравнения, который проверяет, не равно ли значение переменной с символу EOF. В языке C EOF представляет собой специальное значение, которое указывает на конец файла (или потока ввода). Если ввод закончился, то есть достигли конца файла или потока, то с будет равно EOF.
  3. while (с = getchar() != EOF) — это цикл while, который будет выполняться до тех пор, пока значение переменной с не станет равным EOF. Это означает, что цикл будет выполняться до тех пор, пока не будет достигнут конец файла или потока ввода. В общем, этот код считывает символы из стандартного ввода до тех пор, пока не достигнет конца файла или потока ввода.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы