При вводе данных цикл по поиску EOF в Getchar не останавливается - C (СИ)

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

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

Здраствуйте, вот такая проблема:
#include <stdio.h>
 
main()
{
int nc=0;
 
while(getchar() != EOF)
   nc++;
 
printf("%d\n",nc);
getch();
}
При выполнение такого кода ничего не выводит, ты вводишь данные, но цикл продолжает работать бесконечно, хотя должен прекратить и перейти к printf. Использую dev-c++.

Решение задачи: «При вводе данных цикл по поиску EOF в Getchar не останавливается»

textual
Листинг программы
int getchar(void)
{
char c;
return (read(0, &c, 1) ==1) ? (unsigned char)c : EOF;
}

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

В данном коде представлена реализация функции getchar, которая предназначена для чтения одного символа из стандартного ввода. Функция read используется для чтения одного символа из стандартного ввода (file descriptor 0). Функция возвращает число прочитанных байт (1 в данном случае), если успешно, и -1 в противном случае. Аргументы функции read представлены в порядке: файловый дескриптор (0), адрес, куда будет записан символ, и количество байт, которые нужно прочитать. Возвращаемое значение функции read при успешном выполнении преобразуется в тип unsigned char и возвращается из функции getchar. Если чтение не удалось (возвращаемое значение -1), то возвращается значение EOF. Таким образом, цикл по поиску EOF в getchar не останавливается, поскольку возвращаемое значение функции read при успешном выполнении — это значение, которое было считано из стандартного ввода, а не EOF.

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

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