Не могу разобраться с 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)
Объяснение кода листинга программы
В представленном коде выполняется следующая последовательность действий:
с = getchar();— в этом выражении функцияgetchar()используется для чтения символа из стандартного ввода (обычно это клавиатура). Результат этого действия сохраняется в переменнойс.!=— это оператор сравнения, который проверяет, не равно ли значение переменнойссимволуEOF. В языке CEOFпредставляет собой специальное значение, которое указывает на конец файла (или потока ввода). Если ввод закончился, то есть достигли конца файла или потока, тосбудет равноEOF.while (с = getchar() != EOF)— это цикл while, который будет выполняться до тех пор, пока значение переменнойсне станет равнымEOF. Это означает, что цикл будет выполняться до тех пор, пока не будет достигнут конец файла или потока ввода. В общем, этот код считывает символы из стандартного ввода до тех пор, пока не достигнет конца файла или потока ввода.