Switch(col)

{

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ператору. Например, бесконечный цикл


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: