Зачем используется константа 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 для обработки конца файла в командной строке. Вот список элементов кода с номерами и названиями переменных и констант:
-
include
- подключает стандартную библиотеку ввода-вывода -
define IN 1 - определяет константу IN
-
define OUT 0 - определяет константу OUT
- main() { - объявляет функцию main
- int c, nl, nw, nc, state; - объявляет переменные c, nl, nw, nc и state
- state = OUT; - инициализирует переменную state значением OUT
- c = nl = nw = nc = 0; - инициализирует переменные c, nl, nw и nc значением 0
- while((c = getchar()) != EOF) { - начинает цикл while, который читает символы из стандартного ввода
- ++nc; - увеличивает значение переменной nc на 1 для каждого прочитанного символа
- if (c =='\n') - если символ является символом новой строки (\n), то
- nl++; - увеличивает значение переменной nl на 1
- if (c == ' ' || c == '\n' || c == '\t') { - если символ является пробелом, символом новой строки или символом табуляции, то
- state = OUT; - изменяет значение переменной state на OUT
- putchar('\n'); - выводит символ новой строки
- } else if (state == IN) - если значение переменной state равно IN, то
- putchar(c); - выводит символ c
- } else if (state == OUT) { - если значение переменной state равно OUT, то
- state = IN; - изменяет значение переменной state на IN
- nw++; - увеличивает значение переменной nw на 1
- putchar(c); - выводит символ c
- }
- }
- printf(
%d %d %d\n
, nl, nw, nc); - выводит значения переменных nl, nw и nc В этом коде используется константа EOF для обработки конца файла при чтении символов из стандартного ввода. Когда достигается конец файла, функция getchar() возвращает значение EOF, и цикл while завершается. Это позволяет корректно обрабатывать конец файла в командной строке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д