Цикл do-while отличается от циклов for и while тем, что это — цикл с постусловием. Другими словами: цикл всегда выполняется хотя бы один раз, после чего в конце первого прохода проверяется условие продолжения цикла. В отличие от этого циклы for и while могут не выполняться вообще, или выполняться множество раз в зависимости от значения переменной управления циклом. Поскольку циклы do-while выполняются по меньшей мере один раз, их лучше использовать тогда, когда нет сомнений о вхождении в определенный цикл. Например, если программа должна выводить пользовательское меню, то даже если пользователь захочет тут же выйти из программы, он должен увидеть это меню, чтобы определить, по какой клавише выходить из приложения.
Синтаксис цикла do-while:
Do
действие;
while (проверка_условия) ;
При множестве действий в операторе de-while необходимы фигурные скобки:
do {
действие1;
действие2;
действие3;
действиеN;
} while (проверка условия) ;
Пример: цикл do-while используется для печати меню и получения правильного ответа пользователя. Это приложение работает только под DOS.
#include <iostream.h>
#include <conio.h>
#include <graph.h>
#include <stdlib.h>
main()
{
int iuser response;
struct rccoord rcorig_coords;
struct videoconfig svideo config;
if (!_setvideomode (_MAXRESMODE))
exit;
_getvideoconfig(&svideo config);
_settextcolor(9); // ярко-синий
do {
_clearscreen (_GCLEARSCREEN);
_settextposition (3,23);
_outtext(">>> Welcome to Metro-Teller <<<\n\n");
_settextposition (5,29);
_outtext ("Instructions 1\n"); // Команды
_settextposition(6,29);
_outtext ("IRA Balance 2\n"); // Баланс
_settextposition(7,29);
_outtext("Loan Rates 3\n"); // Ссуды
_settextposition(8,29);
_outtext("VISA Transaction 4\n"); // Работа с "VISA-картами
Цикл do-while используется в программе для печати опций меню и выводит их всякий раз заново до тех пор, пока пользователь не выберет опцию 8 для выхода.
В программе имеется вложенный внутренний цикл while. Этот цикл обеспечивает правильность значения, введенного пользователем (числа от 1 до 8, включительно). Так как нежелательно, чтобы ошибочный ввод привел к обновлению экрана, во внутреннем цикле используется оператор _settextposition() для фиксирования курсора на той же строке, где был предыдущий ответ. Для этого в программе запоминается первоначальное положение курсора после вывода сообщения "Enter your selection:" ("Ваш выбор:"). Именно для этой цели использована функция _gettextposition().
Если пользователь вводит некоторое значение, то координаты х и у курсора меняются; поэтому для повторного обращения их начальные значения запоминаются в элементах структуры rcorig_coords.royv и rcorig_coords,col. Если произошел вход во внутренний цикл while, первый оператор _outtext() стирает все ранее введенные значения, а затем происходит ввод следующего числа. Этот процесс повторяется до тех пор, пока будет получено допустимое значение переменной iuser_response. После выхода из внутреннего цикла while управление возвращается внешнему циклу do-while, в котором меню выводится снова и снова до тех пор, пока пользователь введет для выхода число 8.