Этот тип цикла называется циклом с предусловием и выглядит он следующим образом:
while (условие продолжения)
инструкция;
Здесь условие продолжения аналогично соответствующему элементу цикла for – это выражение, результат вычисления которого может быть интерпретирован как истина или ложь. Если условие истинно, то выполняется следующая за заголовком инструкция. Если условие ложно – происходит выход из цикла.
while называется циклом с предусловием потому, что условие проверяется перед первой итерацией (как и в цикле for) и если оно ложно – тело цикла не будет выполнено ни разу.
Пример цикла while, выводящего случайные числа до тех пор, пока они больше 2000:
#include <iostream>
#include <time.h>
using namespace std;
void main ()
{
srand(time(NULL));
int n = rand();
while (n > 2000)
{
cout << n << endl;
n = rand();
}
system("pause");
}
Цикл while, как и for, может быть пустым и бесконечным. Пример пустого цикла, подбирающего случайное число в пределах от 1024 до 2048:
while (rand() < 1024 || rand() > 2048)
;
Пример бесконечного цикла, выводящего на экран точки (прервать выполнение такой программы можно нажав сочетание Ctrl+C):
while (true)
cout << '.';
6.2.3 Цикл do…while
Синтаксис цикла такого типа выглядит следующим образом:
do
{
инструкции;
} while (условие продолжения);
Фигурные скобки здесь необязательны, если в теле цикла находится всего одна инструкция, но для удобства чтения конструкции do…while их рекомендуется использовать всегда.
Данный цикл называется циклом с постусловием, т.к. условие продолжения вычисляется после выполнения тела цикла. Если результатом его вычисления будет истина, тело цикла выполняется ещё раз, если ложь – происходит выход из цикла. Но в любом случае тело цикла гарантированно выполнится минимум один раз – до первой проверки условия.
Пример использования цикла do…while:
#include <iostream>
#include <conio.h>
using namespace std;
void main ()
{
setlocale(LC_ALL, "Russian");
cout << "Нажмите ESC для выхода\n";
char ch;
do
{
ch = getch();
cout << ch;
} while (ch != '\33');
}
В этом примере для считывания введённого пользователем символа используется функция getch() из библиотеки conio. Она считывает с клавиатуры один символ и возвращает его в качестве результата своей работы. Цикл будет продолжаться до тех пор, пока пользователь не нажмет Escape, которому в таблице ASCII соответствует код 33.
Нужно сказать, что цикл do…while используется очень редко, обычно для решаемых задач достаточно циклов for и while. В принципе они полностью взаимозаменяемы, т.е. нет такой задачи, которую можно решить с помощью одного цикла и нельзя – с помощью другого. Поэтому программист может выбирать тот тип цикла, который ему больше нравится.
Обычно цикл for стараются использовать если существует переменная, которая имеет известные начальное и конечное значения и должна изменяться на каждой итерации (счетчик). Если же такой переменной нет – предпочтительнее использовать цикл while.