Циклы while и do while

В этой статье будут рассмотрены еще два цикла: while и do while. Они очень похожи между собой. Их синтаксис:

Отличие состоит только в том, что при начале выполнения цикла while, сразу происходит проверка условия. Если оно возвращает ложь (false), то тело цикла не выполнится ни разу. А при использовании do while, сразу выполнится оператор(-ы) в теле цикла, а потом будет проверено условие в круглых скобках ( ) после ключевого слова while. И аналогично, при возврате false, цикл завершает работу, иначе — выполняется следующий шаг (итерация). То есть тело цикла do while выполнится хотя бы один раз, при любом раскладе.

Поговорим о них в отдельности. Начнем с while. Как говорилось выше, чтобы выполнилось тело цикла, необходимо чтобы при проверке условия в круглых скобках ( ), была возвращена истина (true). Проверка условия и выполнение тела будет происходить, пока условие не вернет false. Из этого выходит, что для прерывания цикла, в его теле должно происходить что-либо, что повлияет на проверку условия. Это может быть или введенное пользователем с клавиатуры значение переменной, которая присутствует в проверочном условии цикла. Или это может быть увеличение либо уменьшение управляющей переменной, которая так же задействована в проверочном условии. Рассмотрим пример с изменением значения управляющей переменной в теле цикла. Постановка задачи: пользователь хочет пополнить карточный счет через терминал. Он вводит сумму с клавиатуры. Предусмотреть в программе возможность изменения ошибочно введенной суммы.

#include <iostream>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "rus");

 

double payment = 0;

int exit = 1; // управляющая переменная

while (exit == 1)

{

cout << "Введите сумму для пополнения счета: ";

cin >> payment;

 

cout << "Оплатить и выйти - нажмите 0.  Изменить сумму - нажмите 1: ";

cin >> exit; // изменение управляющей переменной

}

 

cout << "\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";

cout << "Ваш счет пополнен на " << payment << "$ Спасибо! До свидания!";

cout << "\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";

return 0;

}

Управляющая переменная exit объявляется и инициализируется единицей до цикла while — строка 9. Поэтому при входе в цикл, проверка условия while (exit == 1) вернет true (подробнее об этом можно почитать почитать здесь) и программа перейдет к выполнению тела цикла. Подобное условие часто записывают таким способом: while (exit). С таким условием программа работает, как и с предыдущим. Объясняется это тем, что любое значение переменной exit отличное от нуля будет восприниматься компилятором, как true. Тело цикла будет выполняться, пока пользователь не изменит значение этой переменной на 0. Тогда while (exit) будет равнозначно while (0). То есть проверочное условие ложно. Такая запись встречается чаще, так как она более короткая, хотя и не настолько ясна, как та, что в примере. К этому просто надо привыкнуть.

В строках 16 — 17 пользователю задается вопрос и предлагается сделать выбор:cout << «Оплатить и выйти — нажмите 0. Изменить сумму — нажмите 1: «; То есть если он совершил ошибку при вводе суммы пополнения, у него есть возможность исправить её, нажав 1. Как только пользователь введет верную сумму и нажмет 0 (что соответствует «Оплатить и выйти»), произойдет выход из цикла и программа продолжит работу. В итоге на экране покажется сообщение о сумме пополнения счета — строки 20 — 22.

Результат:

Эту же задачу можно решить применяя цикл do while. В этом случае, изначально значение переменной exit может быть каким угодно. Цикл в любом случае выполнит тело и предложит сделать выбор. Смотрим:

#include <iostream>

using namespace std;

 

int main()

{

setlocale(LC_ALL, "rus");

 

double payment = 0;

int exit = 0;

do

{

cout << "Введите сумму для пополнения счета: ";

cin >> payment;

 

cout << "Оплатить и выйти - нажмите 0.  Изменить сумму - нажмите 1: ";

cin >> exit;

} while (exit == 1);

 

cout << "\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";

cout << "Ваш счет пополнен на " << payment << "$ Спасибо! До свидания!";

cout << "\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n";

return 0;

}

Запустив программу, увидите, что несмотря на то, что переменная exit изначально равна 0, тело цикла do while выполнится. Это потому, что проверка условия производится ниже тела — в строке 18. Обратите внимание на точку с запятой ; после закрывающей круглой скобки. Для цикла do while она обязательна.

Сравнивая циклы forwhile и do while видно, что они похожи. Только в цикле for всё необходимое для его нормальной работы собрано в одной строке (объявление и инициализация управляющей переменной, проверочное условие, изменение управляющей переменной). Тогда как в циклах while и do while управляющая переменная объявлена до цикла, а ее изменение происходит ниже в теле. Какую конструкцию повторения использовать — решать вам. Чаще циклы while и do while применяются тогда, когда неизвестно изначально, сколько будет повторений (как в нашем примере). Стоит ещё помнить, что в отличии от циклов while и do while , управляющая переменная цикла for не видна за пределами его тела (то есть при выходе из цикла, она уничтожается).