{
case red: puts("Stop! Color is red"); break;
case yellow: puts("Warning! Color is yellow"); break;
case green: puts("Go! Color is green"); break;
default: puts("No working"); break;
}
}
Структура «повторение» (см. рис. 5.1, г) реализуется операторами итерации. Операторы итерации позволяют организовывать циклическое выполнение набора операторов программы. Язык C++ имеет три формы операторов итерации: циклы while, do и for. Общий формат оператора while следующий:
while (условное_выражение) оператор_пока_"истина";
Оператор_пока_"истина" будет циклически повторяться до тех пор, пока вычисление условного_выражения не даст значения ноль (ложь). Условное_выражение вычисляется и проверяется первым. Если это значение ненулевое (истина), то выполняется оператор_пока_"истина". Если не встречен оператор перехода, выполняющий выход из цикла, то условное_выражение вычисляется снова. Цикл повторяется до тех пор, пока условное_выражение не даст значения 0.
Как и в случае оператора if, выражения типа указателя могут сравниваться с пустым указателем, так что while (ptr)... эквивалентно while (ptr!= NULL)...
|
|
Цикл while представляет собой удобный способ сканирования строк и других заканчивающихся пустым символом структур данных. Например:
char str[10]="Borland";
char *ptr=&str[0];
int count=0;
//...
while (*ptr++) // цикл до конца строки
count++;
При отсутствии операторов перехода оператор_пока_"истина" должен некоторым способом воздействовать на значение условного_выражения, либо последнее должно изменяться во время его вычисления, чтобы предотвратить зацикливание.
Общий формат оператора do while следующий:
do выполняемый_оператор while (условное_выражение);
Выполняемый_оператор циклически повторяется до тех пор, пока вычисление условного_выражения не даст 0 (ложь). Главное отличие этого оператора от оператора while состоит в том, что условное_выражение здесь проверяется не до, а после первого выполнения тела цикла. Гарантировано как минимум одно его выполнение.
Формат оператора for в языке С следующий:
for (<выражение_инициализации>;<выражение_проверки>;
<выражение_инкремента>) оператор;
В языке С++ <выражение_инициализации> может быть как выражением, так и объявлением.
Последовательность действий при выполнении данного оператора следующая:
1) выполняется вычисление выражения_инициализации, если таковое задано. Как следует из его названия, это выражение обычно инициализирует один или несколько счетчиков цикла, но его синтаксис в действительности позволяет любую степень сложности (включая объявления в случае языка С++);
2) выражение_проверки вычисляется по правилам, приводимым для циклов while. Если выражение_проверки ненулевое (истина), то оператор тела цикла выполняется. Пустое выражение трактуется в данном случае как while(1), то есть, как если бы условие проверки выполнялось всегда. Если выражение_проверки дает значение ноль (ложь), то цикл for прекращается;
|
|
3) выражение_инкремента выполняет приращения одного или нескольких цикловых счетчиков;
4) выражение "оператор" (возможно, пустое) вычисляется, после чего управление возвращается на шаг 2.
Если какие-либо из опциональных элементов опущены, то вместо них должны быть заданы соответствующие точки с запятой, например:
for (;;) {
// то же, что и for (;1;) – вечный цикл
}
Правила для операторов for в языке С применимы и в языке С++. Однако выражение_инициализации в языке С++ может также включать в себя и объявление. Контекст объявленного идентификатора продолжается до конца данного оператора, не далее. Например:
for (int i = 1; i < j; ++i)
{
if (i...)... // здесь обращаться к значению i можно
}
if (i...) // а здесь нельзя: i вне контекста
Использование операторов итерации рассмотрим позже.
При изменении порядка выполнения операторов используются операторы перехода, реализуемые в структурах «развилка» и «повторение». Существует четыре таких оператора: break, continue, goto и return.
Синтаксис оператора break следующий:
break;
Его можно использовать только внутри операторов итерации (while, do и for – циклы) или с оператором switch. Он прекращает выполнение итерации или оператора switch. Поскольку операторы итерации и оператор switch могут комбинироваться и иметь любую глубину вложенности, следует обращать особое внимание на то, чтобы оператр break выполнял выход именно из нужного цикла или оператора switch. Сущеествует правило, которое состоит в том, что оператор break заканчивает выполнение ближайшего к нему объемлющего цикла итерации или оператора switch.
Синтаксис оператора continue следующий:
continue;
Он может быть использован только внутри оператора итерации и передает управление на проверку условия циклов while и do, либо на выражение инкремента цикла for. При вложенности циклов итерации оператор continue считается принадлежащим ближайшей объемлющей итерации.
Синтаксис оператора goto следующий:
goto метка;
Оператор goto передает управление оператору, имеющему указанную «метку», которая должна находиться в пределах той же функции.
Оператор с меткой имеет имя (метку), поэтому к нему можно обращаться с помощью оператора безусловного перехода goto. Формат оператора с меткой:
Идентификатор_метки:оператор;
Идентификатор метки используется оператором goto безусловного перехода. Идентификаторы меток имеют свое собственное пространство имен в контексте функции. Язык С++ дает возможность устанавливать метки любому oператору. Например, бесконечный цикл