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