Выбрать главу

      инициализация ;

      while ( условие )

      {

          {

              // ...тело цикла

          }

          увеличение ;

      }

Все три параметра цикла for являются необязательными. С++ игнорирует отсутствие части инициализации или увеличения цикла, а если опущено условие, С++ будет выполнять цикл for вечно ( или пока какой-либо другой оператор не передаст управление за пределы цикла ).

Для лучшего понимания цикла for рассмотрим пример. Приведённая ниже программа ForDemo выполняет то же, что и WhileDemo, но вместо while использует цикл for.

      /* ForDemo1. Вводится счётчик цикла. На экран выводится количество выполненных циклов for */

      #include <cstdio>

      #include <cstdlib>

      #include <iostream>

      using namespace std ;

      int main( int nNumberofArgs , char* pszArgs[ ] )

      {

          setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

          /* Ввод счётчика цикла */

          int loopCount ;

          cout << "Введите loopCount: " ;

          cin >> loopCount ;

          /* Работаем loopCount раз */

          for ( ; loopCount > 0 ; )

          {

              loopCount = loopCount - 1

              cout << "Осталось выполнить "

                    << loopCount << " циклов\n" ;

          }

          /* Пауза для того, чтобы посмотреть на результат работы программы */

          system( "PAUSE" ) ; return 0 ;

      }

_______________

11Увеличение в данном случае — достаточно условное название. Чаще всего здесь действительно выполняется увеличение счётчика цикла, однако это может быть любая инструкция С++, в том числе и пустая. — Прим. ред.

_________________

71 стр. Глава 5. Операторы управления программой

Программа ForDemo1 считывает вводимое при помощи клавиатуры значение в переменную loopCount. Управление передаётся циклу, если введённое значение больше нуля. Внутри цикла программа уменьшает значение счётчика и выводит получившееся значение, после чего управление вновь передаётся оператору for. Как только значение loopCount становится равным 0 , работа цикла завершается.

«Все три инструкции цикла for могут быть пустыми. Пустые инициализация и увеличение ничего не делают и никак не влияют на работу цикла, а пустое условие рассматривается как возвращающее значение true

[Советы]

Приведённый цикл for имеет две небольшие проблемы. Во-первых, он деструктивен — не в том смысле, что может сжечь ваш монитор или откусить шнур мыши — а в том плане, что он изменяет значение loopCount, которое, таким образом, "уничтожается". Во-вторых, цикл получился "нисходящий", т.е. значения переменной цикла идут от больших к меньшим. Всего этого легко избежать, если добавить специальную переменную — счётчик цикла.

      /* ForDemo2 — Вводится счётчик цикла. На экран выводится количество выполненных циклов for */

      #include <cstdio>

      #include <cstdlib>

      #include <iostream>

      using namespace std ;

      int main( int nNumberofArgs , char* pszArgs[ ] )

      {

          setlocale ( LC_ALL , ".1251" ) ; /* печать русских текстов */

          /* Ввод количества циклов */

          int loopCount ;

          cout << "Введите loopCount: " ;

          cin >> loopCount ;

          /* Цикл до достижения значения loopCount */

          for ( int i = 1 ; i <= loopCount ; i++ )

          {

              cout << "Выполнено " << i << " циклов( a )\n" ;

          }

          /* Пауза для того, чтобы посмотреть на результат работы программы */