на них нельзя передать управление
Синтаксически конструкции
case и
default являются метками (однако, на них нельзя передать управление по оператору
goto). Метки
case и
default существенны только при начальной проверке, когда выбирается оператор для выполнения в теле переключателя. Все операторы тела, следующие за выбранным, выполняются последовательно, как бы "не замечая" меток
case
и
default, если только какой-либо из операторов не передаст управление за пределы тела оператора
switch. Для выхода из тела переключателя обычно используется оператор разрыва
break. Одна из распространенных ошибок состоит в том, что программисты забывают разделять альтернативные операторы в теле переключателя операторами
break.
В заголовок составного оператора, формирующего тело оператора
switch, можно помещать объявления (см. раздел 5.3), но инициализаторы, включенные в объявления, не будут выполнены, поскольку при выполнении оператора
switch управление непосредственно передается на выполняемый оператор внутри тела, обходя строки, которые содержат инициализацию.
Примеры:
/* пример 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.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий