The while loop is particularly suitable when the number of iterations is not known or can not be determined in advanced. In this section, another loop that is useful in similar situations, the do … while loop is discussed.
In case of a do …while loop, it is a exit-controlled or bottom-tested loop as opposed to the while loop which is entry-controlled or top-tested. The do and while commands are separated by one statement. If it is required to include more statements they should be included between a pair of curly brackets to present them as a single block of statements, otherwise the compiler will send out an error message. In a program, do is placed at the top of the statements and while is placed at the bottom of statements. The test is carried out after the execution of statements in the while expression, i.e., at bottom of loop. The statements are executed from top to bottom. Therefore, even if the while expression evaluates false, at least one computation is carried out.
Thus, the statement(s) within a do … while loop will be executed at least once, whereas the statement(s) within a while loop may not be executed at all. The general syntax of the do…while loop is given below.
do
statement;
while ( expr) ;
where expr is the loop control expression that may be any valid C expression such as arithmetic, relational or logical and statement is the loop body that is to be executed repeatedly. The body of the do…while loop may comprise a compound or a block statement as shown below.
do
{
statement;
statement ;
………
}while ( expr ) ;
The flowchart for the do … while loop is given in Fig. When the loop is entered, the statement(s) within the loop are executed and then expression expr is evaluated. If the value of expr is true (non-zero), the body of the loop is executed again; otherwise, control leaves the loop. Thus, the body of the loop is executed until expression expr evaluates as true (non-zero). Note that the statements within the do … while loop loop will be executed at least once.
Although the for loop is more suitable in situations where the number of iterations are known or can be determined in advance, we can also use the do … while loop in such situations. This can be done as follows:
initial_expr ;
do {
statement;
update_expr ;
} while (final_expr ) ;
However, remember that this is not equivalent to the for loop given below as the do…while loop is bottom-tested, whereas the for loop is top-tested.
for ( initial_expr ; final_expr ; update_expr)
statement;
Illustrates do-while loop
#include <stdio.h>
void main()
{
int i =5, m=0,n=0;
clrscr();
printf("i\t m\t n\n");
do
{
m =i*i;
n = i*i*i;
printf("%d\t %d\t %d\n", i, m, n );
i--;
}
while(i<=2 );
}
The output given below shows that even though the condition is false, the program has been executed once.