Зачем используется константа EOF для работы в командной строке? - C (СИ)

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

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

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

Решение задачи: «Зачем используется константа EOF для работы в командной строке?»

textual
Листинг программы
  1. #include <stdio.h>
  2. #define IN 1
  3. #define OUT 0
  4.  
  5. main() {
  6.     int c, nl, nw, nc, state;
  7.     state = OUT;
  8.     c = nl = nw = nc = 0;
  9.    
  10.     while((c = getchar()) != EOF) {
  11.         ++nc;
  12.         if (c =='\n')
  13.             nl++;
  14.         if (c == ' ' || c == '\n' || c == '\t') {
  15.             state = OUT;
  16.             putchar('\n');
  17.         } else if (state == IN)
  18.             putchar(c);
  19.         else if (state == OUT) {
  20.             state = IN;
  21.             nw++;
  22.             putchar(c);
  23.         }
  24.     }
  25.     printf("%d %d %d\n", nl, nw, nc);
  26. }

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

В этом коде используется константа EOF для обработки конца файла в командной строке. Вот список элементов кода с номерами и названиями переменных и констант:

  1. include - подключает стандартную библиотеку ввода-вывода

  2. define IN 1 - определяет константу IN

  3. define OUT 0 - определяет константу OUT

  4. main() { - объявляет функцию main
  5. int c, nl, nw, nc, state; - объявляет переменные c, nl, nw, nc и state
  6. state = OUT; - инициализирует переменную state значением OUT
  7. c = nl = nw = nc = 0; - инициализирует переменные c, nl, nw и nc значением 0
  8. while((c = getchar()) != EOF) { - начинает цикл while, который читает символы из стандартного ввода
  9. ++nc; - увеличивает значение переменной nc на 1 для каждого прочитанного символа
  10. if (c =='\n') - если символ является символом новой строки (\n), то
  11. nl++; - увеличивает значение переменной nl на 1
  12. if (c == ' ' || c == '\n' || c == '\t') { - если символ является пробелом, символом новой строки или символом табуляции, то
  13. state = OUT; - изменяет значение переменной state на OUT
  14. putchar('\n'); - выводит символ новой строки
  15. } else if (state == IN) - если значение переменной state равно IN, то
  16. putchar(c); - выводит символ c
  17. } else if (state == OUT) { - если значение переменной state равно OUT, то
  18. state = IN; - изменяет значение переменной state на IN
  19. nw++; - увеличивает значение переменной nw на 1
  20. putchar(c); - выводит символ c
  21. }
  22. }
  23. printf(%d %d %d\n, nl, nw, nc); - выводит значения переменных nl, nw и nc В этом коде используется константа EOF для обработки конца файла при чтении символов из стандартного ввода. Когда достигается конец файла, функция getchar() возвращает значение EOF, и цикл while завершается. Это позволяет корректно обрабатывать конец файла в командной строке.

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


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

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

14   голосов , оценка 3.714 из 5

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

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

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