Мы уже напоминали о том, что использовать для многозадачного ветвления в программе вложенные операторы 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"); } }
| |