The do...while repetition statement is similar to the while statement. In the while statement, the loop-continuation condition test occurs at the beginning of the loop before the body of the loop executes. The do...while statement tests the loop-continuation condition after the loop body executes; therefore, the loop body always executes at least once. When a do...while terminates, execution continues with the statement after the while clause. Note that it is not necessary to use braces in the do...while statement if there is only one statement in the body; however, most programmers include the braces to avoid confusion between the while and do...while statements. For example,
while ( condition )
normally is regarded as the header of a while statement. A do...while with no braces around the single statement body appears as
do statement while ( condition );
which can be confusing. The last linewhile( condition );might be misinterpreted by the reader as a while statement containing as its body an empty statement. Thus, the do...while with one statement is often written as follows to avoid confusion:
do { statement } while ( condition );
Good Programming Practice 5.9
Always including braces in a do...while statement helps eliminate ambiguity between the while statement and the do...while statement containing one statement. |
Figure 5.7 uses a do...while statement to print the numbers 110. Upon entering the do...while statement, line 13 outputs counter's value and line 14 increments counter. Then the program evaluates the loop-continuation test at the bottom of the loop (line 15). If the condition is true, the loop continues from the first body statement in the do...while (line 13). If the condition is false, the loop terminates and the program continues with the next statement after the loop (line 17).
Figure 5.7. do...while repetition statement.
(This item is displayed on pages 198 - 199 in the print version)
1 // Fig. 5.7: fig05_07.cpp 2 // do...while repetition statement. 3 #include 4 using std::cout; 5 using std::endl; 6 7 int main() 8 { 9 int counter = 1; // initialize counter 10 11 do 12 { 13 cout << counter << " "; // display counter 14 counter++; // increment counter 15 } while ( counter <= 10 ); // end do...while 16 17 cout << endl; // output a newline 18 return 0; // indicate successful termination 19 } // end main
|
do...while Statement UML Activity Diagram
Figure 5.8 contains the UML activity diagram for the do...while statement. This diagram makes it clear that the loop-continuation condition is not evaluated until after the loop performs the loop-body action states at least once. Compare this activity diagram with that of the while statement (Fig. 4.6). Again, note that (besides an initial state, transition arrows, a merge, a final state and several notes) the diagram contains only action states and a decision. Imagine, again, that the programmer has access to a bin of empty do...while statement UML activity diagramsas many as the programmer might need to stack and nest with the activity diagrams of other control statements to form a structured implementation of an algorithm. The programmer fills in the action states and decision symbols with action expressions and guard conditions appropriate to the algorithm.
Figure 5.8. UML activity diagram for the do...while repetition statement of Fig. 5.7.
Introduction to Computers, the Internet and World Wide Web
Introduction to C++ Programming
Introduction to Classes and Objects
Control Statements: Part 1
Control Statements: Part 2
Functions and an Introduction to Recursion
Arrays and Vectors
Pointers and Pointer-Based Strings
Classes: A Deeper Look, Part 1
Classes: A Deeper Look, Part 2
Operator Overloading; String and Array Objects
Object-Oriented Programming: Inheritance
Object-Oriented Programming: Polymorphism
Templates
Stream Input/Output
Exception Handling
File Processing
Class string and String Stream Processing
Web Programming
Searching and Sorting
Data Structures
Bits, Characters, C-Strings and structs
Standard Template Library (STL)
Other Topics
Appendix A. Operator Precedence and Associativity Chart
Appendix B. ASCII Character Set
Appendix C. Fundamental Types
Appendix D. Number Systems
Appendix E. C Legacy Code Topics
Appendix F. Preprocessor
Appendix G. ATM Case Study Code
Appendix H. UML 2: Additional Diagram Types
Appendix I. C++ Internet and Web Resources
Appendix J. Introduction to XHTML
Appendix K. XHTML Special Characters
Appendix L. Using the Visual Studio .NET Debugger
Appendix M. Using the GNU C++ Debugger
Bibliography