while (<логическое выражение>) {<тело цикла>}
Тело
оператора while выполняется нуль или более раз до тех пор, пока <логическое
выражение> станет ложным (равным нулю).
Вначале
вычисляется <логическое выражение>. Если оно изначально ложно,
то тело оператора while не выполняется и управление передаётся на
следующий оператор программы. Если <логическое выражение> является
истинным (не нуль), то выполняется тело цикла.
Перед
каждым следующим выполнением тела оператора <логическое выражение>
перевычисляется. Повторение выполнения тела оператора происходит до
тех пор, пока <логическое выражение> остаётся истинным.
Оператор
while может также завершиться при выполнении операторов break, goto,
return, находящихся внутри тела while.
Пример:
while
(i>=0) {
string1 [i] = string2 [i]; i--;
}
В вышеприведённом
примере копируются символы из string2 в string1. Если i больше или
равно нулю, то string2[i] присваивается индексной переменной string1[i]
и i декрементируется. Когда i становится меньше нуля, то выполнение
оператора while завершается.
Рассмотрим
копирование строки, когда заданы указатель p на её первый символ и
указатель q на целевую строку. По соглашению строка оканчивается символом
с целым значением 0.
while (p != 0) {
*q
= *p; // скопировать символ
q = q+1;
p = p+1;
}
*q = 0; // завершающий символ 0 скопирован не был
Следующее
после while условие должно быть заключено в круглые скобки. Условие
вычисляется, и если его значение не нуль, выполняется непосредственно
следующий за ним оператор. Это повторяется до тех пор, пока вычисление
условия не даст нуль.
В этом
примере можно использовать операцию ++ для непосредственного указания
увеличения, и проверка упростится:
while (*p) *q++ = *p++;
*q = 0;
Здесь
конструкция *p++ означает: «взять символ, на который указывает p,
затем увеличить p».
Этот
пример можно ещё упростить, так как указатель p разыменовывается дважды
за каждый цикл. Копирование символа можно делать тогда же, когда производится
проверка условия:
while (*q++ = *p++) ;
Здесь
берётся символ, на который указывает p, p увеличивается, этот символ
копируется туда, куда указывает q, и q увеличивается. Если символ
ненулевой, цикл повторяется. Поскольку вся работа выполняется в условии,
не требуется ни одного оператора. Чтобы указать на это, используется
пустой оператор.