5.4.4. Оператор do while
Операторdo while похож на оператор while, но его условие проверяется после выполнения тела. Независимо от значения условия тело цикла выполняется по крайней мере однажды. Его синтаксическая форма приведена ниже.
do
оператор
while (условие);
После заключенного в скобки условия оператор do while заканчивается точкой с запятой.
В цикле do while оператор выполняется прежде, чем условие. Причем условие не может быть пустым. Если условие ложно, цикл завершается, в противном случае цикл повторяется. Используемые в условии переменные следует определить вне тела оператора do while.
Напишем программу, использующую цикл do while для суммирования любого количества чисел.
// многократно запрашивать у пользователя пары чисел для суммирования
string rsp; // используется в условии, поэтому не может быть
// определена в цикле do
do {
cout << "please enter two values: ";
int val1 = 0, val2 = 0;
cin >> val1 >> val2;
cout << "The sum of " << val1 << " and " << val2
<< " = " << val1 + val2 << " "
<< "More? Enter yes or no: ";
cin >> rsp;
} while (!rsp.empty() && rsp[0] != 'n');
Цикл начинается запросом у пользователя двух чисел. Затем выводится их сумма и следует запрос, желает ли пользователь суммировать далее. Ответ пользователя проверяется в условии. Если ввод пуст или начинается с n, цикл завершается. В противном случае цикл повторяется.
Поскольку условие не обрабатывается до окончания оператора или блока, цикл do while не позволяет определять переменные в условии.
do {
// ...
mumble(fоо) ;
} while (int foo = get_foo()); // ошибка: объявление в условии do
Если определить переменные в условии, то любое их использование произойдет прежде определения!
Упражнения раздела 5.4.4
Упражнение 5.18. Объясните каждый из следующих циклов. Исправьте все обнаруженные ошибки.
(a) do
int v1, v2;
cout << "Please enter two numbers to sum:";
if (cin >> v1 >> v2)
cout << "Sum is: " << v1 + v2 << endl;
while (cin);
(b) do {
// ...
} while (int ival = get_response());
(c) do {
int ival = get_response();
} while (ival);
Упражнение 5.19. Напишите программу, использующую цикл do while для циклического запроса у пользователя двух строк и указания, которая из них меньше другой.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОК