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

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

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

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

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

textual
Листинг программы
#include <stdio.h>
#define IN 1
#define OUT 0
 
main() {
    int c, nl, nw, nc, state;
    state = OUT;
    c = nl = nw = nc = 0;
    
    while((c = getchar()) != EOF) {
        ++nc;
        if (c =='\n') 
            nl++;
        if (c == ' ' || c == '\n' || c == '\t') {
            state = OUT;
            putchar('\n');
        } else if (state == IN)
            putchar(c);
        else if (state == OUT) {
            state = IN;
            nw++;
            putchar(c);
        }
    }
    printf("%d %d %d\n", nl, nw, nc);
}

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

В этом коде используется константа 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
Похожие ответы