Поскольку синтаксис оператора for позволяет использовать при его описании цикла достаточно сложные конструкции, необходимость в теле цикла иногда вообще отпадает. Это означает, что тело цикла будет состоять из пустой строки, заканчивающейся символом точки с запятой (;). Данный символ можно размещать в одной строке с оператором for. Пример пустого цикла приведен в листинге 7.13.
Листинг 7.13. Использование оператора for для организации пустого цикла
1: // Листинг 7.13.
2: // Использование оператора for
3: // для организации "пустого" цикла
4:
5: #include
6: int main
7: {
8: for (int i = 0; i<5; cout << "i: " << i++ << endl)
9: ;
10: return 0;
11: }
Результат:
i: 0
i: 1
i: 2
i: 3
i: 4
Анализ:
Оператор for в строке 8 содержит все три параметра. Инициализация в данном случае состоит из описания переменной i и присвоения ей значения 0. Затем проверяется условие i<5, и, если оно выполняется, в третьей части оператора for значение переменной выводится на экран и увеличивается на единицу.Поскольку все необходимые операции выполняются в самом операторе for, тело цикла можно оставить пустым. Такой вариант нельзя назвать оптимальным, так как запись в одной строке большого количества операций значительно усложняет восприятие программы. Правильнее было бы записать этот цикл таким образом:
8: for (int i = 0; i<5; i++)
9: cout << "i: " << i << endl;
Оба варианта записи равноценны, однако второй вариант гораздо читабельнее и понятнее.
Вложенные циклы
Цикл, организованный в теле другого цикла, называют вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего цикла. Листинг 7.14 демонстрирует заполнение элементов матрицы с помощью вложенного цикла.
Листинг 7.14. Вложенные циклы
1: // Листинг 7.14.
2: // Вложенные циклы с оператором for
3:
4: #include
5:
6: int main
7: {
8: int rows, columns;
9: char theChar;
10: cout << "How many rows? ";
11: cin >> rows;
12: cout << "How many columns? ";
13: cin >> columns;
14: cout << "What character? ";
15; cin >> theChar;