
TBN.ru
|
Мы
уже напоминали о том, что использовать для
многозадачного ветвления в программе вложенные
операторы if-then-else Если глубина
вложенности этих операторов свыше трех, то
конструкция теряет ясность. Более наглядным и
понятным в данной ситуации выглядит оператор switch
(переключатель), специально
предназначенный для принятия одного из многих
решений. Чаще всего этот оператор выглядит
следующим образом:
switch(целое выражение)
{
case константа1: оператор1;
case константа2: оператор2;
...
...
...
case константаn: операторn;
default : оператор;
}
|
При выполнении
этого оператора вычисляется выражение, стоящее в
скобках после ключевого слова switch, которое
должно быть целым. Оно, в частности, может быть и
символьным значением (в языке Си символьные
значения автоматически расширяются до целых
значений). Эта целая величина используется в
качестве критерия для выбора одного из возможных
вариантов. Ее значение сравнивается с константой
операторов case. Вместо целой или
литерной константы в операторе case может
стоять дае некоторое константное выражение.
Значения таких констант (выражений) должны быть
различными в разных операторах case. При
несовпадении выполняется переход к следующему case
и сравнивается его константа. В случае
совпадения "константы_i"
выполняется "оператор_i", а также
все последующие операторы case и default.
Если не было ни одного совпадения и имеется
оператор default, то выполняется
стоящий за ним оператор. Если же оператора default
не было, выполнение программы продолжится с
оператора, следующего за структурой switch. Таким
образом, при каждом выполнении оператора
просматриваются все метки case. Рассмотрим
следующую программу (пример 5.2)
Пример 5.2
/*проверка switch*/
#include <stdio.h>
main()
{
int k=2;
switch(k)
{
case 0; printf("выбор 0\n");
case 1; printf("выбор 1\n");
case 2; printf("выбор 2\n");
case 3; printf("выбор 3\n");
default: printf("default\n");
}
} |
Как видите,
происходит то, о чем мы говорили: выполняется
альтернатива, соответствующая k=2 и все
последующие операторы case, а также
выриант default. Чтобы обеспечить выбор
одного из многих вариантов (что и требуется чаще
всего), используют обычно оператор braek, который
вызывает немедленный выход из оператора switch
(пример 5.3) Для этой цели можно применять и
оператор return, а continue можно
применять лишь в случае, когда сам оператор switch
находится внутри цикла. Тогда continue
вызывает немедленный переход к следующей
интеракции, без рассмотрения оставшихся case.
Пример 5.3
/*проверка switch*/
#include <stdio.h>
main()
{
int k=2;
switch(k)
{
case 0; printf("выбор 0\n");
break;
case 1; printf("выбор 1\n");
break;
case 2; printf("выбор 2\n");
break;
case 3; printf("выбор 3\n");
break;
default: printf("default\n");
}
}
|
|