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.