logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

122 Глава 2

Типичная ошибка программирования 2.14

Размещение точки с запятой сразу после правой закрывающей скобки заголовка for делает тело структуры пустым оператором. Обычно это логическая ошибка.

Части структуры for — задание начального значения, условие продол­жения цикла и изменение переменной могут содержать арифметические вы­ражения. Например, предположим, что x = 2 и у = 10. Если x и у не из­меняются в теле цикла, то оператор

for (int j = x; j <= 4 * x * у; j += у / x)

эквивалентен оператору

for (int j = 2; j <= 80; j += 5)

«Приращение» структуры for может быть отрицательным (в этом случае в действительности происходит не приращение, а уменьшение переменной, управляющей циклом).

Если условие продолжения цикла с самого начала не удовлетворяется, то операторы тела структуры for не выполняются и управление передается оператору, следующему за for.

Управляющая переменная иногда печатается или используется в вычис­лениях в теле структуры for, но обычно это делается без изменений ее ве­личины. Чаще управляющая переменная используется только для контроля числа повторений и никогда не упоминается в теле структуры.

Хороший стиль программирования 2.19

Хотя управляющая переменная может изменяться в теле цикла for, избегайте делать это, так как такая практика приводит к неявным, неочевидным ошибкам.

Структура for изображается на блок-схеме очень похоже на структуру while. Например, блок-схема оператора

for (int counter = 1; counter <= 10; counter++) cout « counter « endl;

приведена на рис. 2.19. Эта блок-схема ясно показывает, что задание началь­ного значения производится только один раз и что изменение переменной происходит каждый раз после выполнения оператора тела цикла. Заметьте, что (не считая маленьких окружностей и стрелок) блок-схема содержит только символы прямоугольников и ромбов. Представим себе снова, что программист имеет доступ к глубокому бункеру, содержащему пустые структуры for — столько, сколько может потребоваться программисту для пакетирования и вложения в другие управляющие структуры, чтобы структурированно отобра­зить управляющую логику алгоритма. И затем эти прямоугольники и ромбы заполняются необходимыми действиями и условиями выбора в соответствии с алгоритмом.