Язык программирования Си для персонального компьютера | страница 98



управление непосредственно передается на выполняемый оператор внутри тела, обходя строки, которые содержат инициализацию.

Примеры:

/* пример 1 */

switch (с) {

case 'А': capa++;

case 'a': lettera++;

default: total++;

}

/* пример 2 */

switch (i) {

case -1: n++;

break;

case 0: z++;

break;

case 1: p++;

break;

}

/* пример 3 */

switch (i) {

case 1: if(a > 0) {

case 2: b = 3;

} else

case 3: k = 0;

}

В первом примере все три оператора в теле оператора switch выполняются, если значение с равно 'А'. Передача управления осуществляется на первый оператор (capa++;), далее операторы выполняются в порядке их следования в теле.

Если с равно 'а', те инкрементируются переменные lettera и total. Наконец, если с не равно 'А' или 'а', то инкрементируется только переменная total.

Во втором примере в теле оператора switch после каждого оператора следует оператор разрыва break, который осуществляет принудительный выход из тела оператора-переключателя switch. Если i равно -1, переменная n инкрементируется. Оператор break, следующий за оператором n++, вызывает передачу управления за пределы тела переключателя, минуя остающиеся операторы. Аналогично, если i равно нулю, инкрементируется только переменная z; если i равно 1, инкрементируется только переменная р. Передний оператор break не является обязательным, поскольку без него управление все равно перешло бы на конец составного оператора, но он включен для единообразия.

В третьем примере при i, равном 1, будет выполнена следующая последовательность действий:

if(а > 0)

b = 3;

else

k = 0;

При i, равном 2, переменной b будет присвоено значение 3. При i, равном 3, переменная k будет обнулена.

Оператор в теле переключателя может быть помечен множественными метками case, как показано в следующем примере:

switch (с) {

case 'а':

case 'b':

case 'с':

case 'd':

case 'e':

case 'i': hexcvt(c);

}

В этом примере, если выражение переключения примет любое из значений 'а', 'b', 'с', 'd', 'e', 'i', будет вызвана функция hexcvt.

Оператор разрыва break

Синтаксис:

break;

Действие:

Оператор разрыва break прерывает выполнение операторов do, for, while или switch. Он может содержаться только в теле этих операторов. Управление передается оператору программы, следующему за прерванным. Появление оператора break вне операторов do, for, while, switch компилятор рассматривает как ошибку.

Если оператор разрыва break записан внутри вложенных операторов do, for, while, switch, то он завершает только непосредственно охватывающий его оператор