K&R 2.2 Правильно ли написано? - C (СИ)
Формулировка задачи:
for( i = 0; i < MAXLINE - 1) && (c = getchar()) != EOF && c != '\n'; ++i) line[i] = c;
for( i = 0; (i < MAXLINE - 1) + ((c = getchar()) != EOF) + (c != '\n') == 3; ++i) line[i] = c;
Решение задачи: «K&R 2.2 Правильно ли написано?»
textual
Листинг программы
for( i = 0; ; ++i) { if(i >= MAXLINE - 1) { i--; break; } if((c = getchar()) != EOF) if( c != '\n') { line[i] = c; continue; } i--; break; }
Объяснение кода листинга программы
В этом коде реализована функция, которая читает ввод пользователя (предположительно строку) и записывает эту строку в массив. Список действий:
- Переменная
i
инициализируется как 0. - Устанавливается условие для цикла
for
, которое выполняется до тех пор, пока не достигнется условие окончания цикла (не определенное в данном коде). - Внутри цикла проверяется, достиг ли
i
значенияMAXLINE - 1
, если да, то выполняется следующее действие. - Значение
i
уменьшается на 1. - Условие цикла
for
проверяется снова. - Если
c
не равноEOF
(концу файла), то выполняется следующее действие. - Проверяется, равно ли
c
символу новой строки\n
. - Если
c
не равно символу новой строки, то выполняется следующее действие. - Значение
c
записывается в массивline
по индексуi
. - Условие цикла
for
проверяется снова. - Если
c
равно символу новой строки, то выполняется следующее действие. - Значение
i
уменьшается на 1. - Условие цикла
for
проверяется снова. - Если условие цикла
for
выполняется, то выполняется следующее действие. - Цикл
for
завершается. Пожалуйста, обратите внимание, что этот код не полностью завершен, поскольку не определено конечное условие циклаfor
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д