Использование конструкции while(true)



 

В качестве условия, проверяемого при переходе на очередную итерацию цикла, может выступать любое выражение, корректное с точки зрения синтаксиса языка C++. Цикл выполняется до тех пор, пока это выражение истинно. Для организации так называемых бесконечных циклов в качестве такого выражения применяется логическая константа true. Листинг 7.5 демонстрирует пример бесконечного цикла, выполняющего счет до десяти.

Листинг 7.5. Еще один пример использования оператора while

1: // Листинг 7.5.

2: // Пример "бесконечного" цикла

3:

4: #include <iostream.h>

5:

6: int main()

7: {

8: int counter = 0;

9:

10: while (true)

11: {

12: counter++;

13: if (counter > 10)

14: break;

15: }

16: cout << "Counter: " << counter << "\n";

17: return 0;

18: }

 

Результат:

Counter: 11

 

Анализ: Понятно, что условие продолжения цикла, заданное в строке 10, будет выполняться всегда. В теле цикла (строка 12) значение переменной counter увеличивается на единицу. Работа цикла продолжается до тех пор, показначение counter не превысит 10. Выполнение цикла прерывается оператором break в строке 14, и на экран выводится значение переменной counter (строка 16).

Несмотря на то что данная программа работает, ее структуру нельзя назвать оптимальной. Это типичный пример некорректного использования оператора while. Правильным решением была бы организация проверки значения counter в условии продолжения цикла.

Гибкий синтаксис языка C++ позволяет решить одну и ту же задачу множеством различных способов. Поэтому важно научиться выбирать средство, наиболее подходящее в конкретной ситуации.

 

 

Организация циклов с помощью конструкции do...while

 

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

Листинг 7.6. Преждевременное завершение цикла с while

1: // Листинг 7.6.

2: // Если условие продолжения цикла не выполняется,

3: // тело цикла пропускается.

4:

5: #include <iostream.h>

6:

7: int main()

8: {

9: int counter;

10: cout << "How many hellos?: ";

11: cin >> counter;

12: while (counter > 0)

13: {

14: cout << "Hello!\n";

15: counter--;

16: }

17: cout << "Counter is OutPut: " << counter;

18: return 0;

19: }

 

Результат:

How many hellos?: 2

Hello!

Hello!

Counter is 0utPut: 0

How many hellos?: 0

Counter is 0utPut: 0

 

Анализ: В строке 10 вам предлагается ввести начальное значение счетчика, которое записывается в переменную counter. В строке 12 это значение проверяется, а затем в теле цикла уменьшается на единицу. При первом запуске программы начальное значение счетчика равнялось двум, поэтому тело цикла выполнялось дважды. Во втором случае было введено число 0. Понятно, что в этом случае условие продолжения цикла не выполнялось и тело цикла было пропущено. В результате приветствие не было выведено ни разу.

Как же поступить, чтобы сообщение выводилось по крайней мере один раз? С помощью оператора while это сделать невозможно, так как условие проверяется еще до выполнения тела цикла. Один из способов решения этой проблемы — использование оператора if для контроля начального значения переменной counter.

If (counter < 1) // контроль начального значения

counter = 1;

Правда, это довольно <<корявый>> выход из ситуации.

Использование конструкции do...while

 

При использовании конструкции do...while условие проверяется после выполнения тела цикла. Это гарантирует выполнение операторов цикла по крайней мере один раз. В листинге 7.7 приведен измененный вариант предыдущей программы, в котором вместо оператора while используется конструкция do...while.

Листинг 7.7. Использование конструкции do...while

1: // Листинг 7.7.

2: // Пример использования конструкции do...while

3:

4: include <iostream.h>

5:

6: int main()

7: {

8: int counter;

9: cout << "How many hellos? ";

10: cin >> counter;

11: do

12: {

13: cout << "Hello\n";

14: counter--;

15: } while (counter >0 );

16: cout << "Counter is: " << counter << endl;

17: return 0;

18: }

 

Результат:

How many hellos? 2

Hello

Hello

Counter is: 0

 

Анализ: В строке 9 пользователю предлагается ввести начальное значение счетчика, которое записывается в переменную counter. В конструкции do.. while условие проверяется в конце каждой итерации, что гарантирует выполнение тела цикла по меньшей мере один раз. В строке 13 на экран выводится текст приветствия, а в строке 14 значение переменной counter уменьшается на единицу. Условие продолжения цикла проверяется в строке 15. Если оно истинно, выполняется следующая итерация цикла ,(строка 13). В противном случае цикл завершается и управление передается в строку 16.

При использовании в конструкциях do.. .while операторы break и continue дают тот же результат, что и при использовании с оператором while. Единственное различие этих двух методов организации циклов состоит в проверке условия продолжения цикла. В первом случае оно контролируется перед выполнением тела цикла, а во втором — после него.

 

 

Оператор for

 

Для организации цикла с помощью оператора while необходимо выполнить три обязательных действия: установить начальные значения переменных цикла, а затем на каждой итерации проконтролировать выполнение условия продолжения цикла и изменить значение переменной цикла (листинг 7.8).


Дата добавления: 2019-02-12; просмотров: 210; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!