do while
StatementA do while
statement is like a while
but the condition is tested after the statement body completes. Regardless of the value of the condition, we execute the loop at least once. The syntactic form is as follows:
do
statement
while (condition);
In a do
, statement is executed before condition is evaluated. condition cannot be empty. If condition evaluates as false
, then the loop terminates; otherwise, the loop is repeated. Variables used in condition must be defined outside the body of the do while
statement.
We can write a program that (indefinitely) does sums using a do while
:
// repeatedly ask the user for a pair of numbers to sum
string rsp; // used in the condition; can't be defined inside the 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'),
The loop starts by prompting the user for two numbers. It then prints their sum and asks whether the user wishes to do another sum. The condition checks that the user gave a response. If not, or if the input starts with an n
, the loop is exited. Otherwise the loop is repeated.
Because the condition is not evaluated until after the statement or block is executed, the do while
loop does not allow variable definitions inside the condition:
do {
// . . .
mumble(foo);
} while (int foo = get_foo()); // error: declaration in a do condition
If we could define variables in the condition, then any use of the variable would happen before the variable was defined!
Exercise 5.18: Explain each of the following loops. Correct any problems you detect.
(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);
Exercise 5.19: Write a program that uses a do while
loop to repetitively request two string
s from the user and report which string
is less than the other.