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

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

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

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

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

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

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

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

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


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

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

13   голосов , оценка 3.615 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы