Основным средством для организации мультиветвления служит оператор-переключатель, формат которого имеет вид:
switch(выражение)
{ caseконстанта1: операторы_1;
caseконстанта2: операторы_2;
default:операторы;
}
В этом операторе используются три служебных слова: switch, case, default.Первое из них идентифицирует собственно оператор-переключатель. Служебное слово caseс последующей константой является в некотором смысле меткой. Константы могут быть целыми или символьными и все должны быть различными (чтобы метки были различимы). Служебное слово defaultтакже обозначает отдельную метку. При выполнении оператора (рис. 2.6, а) вычисляется выражение, записанное после switch,и его значение последовательно сравнивается с константами, которые помещены вслед за case.При первом же совпадении выполняются операторы, помеченные данной меткой. Если выполненные операторы не предусматривают какого-либо перехода (т.е. среди них нет ни goto,ниreturn,ни exit(),ниbreak),то далее выполняются операторы всех следующих вариантов, пока не появится оператор перехода или не закончится переключатель.
Рис. 2.6. Переключатель (а) и альтернативный выбор (6):
а - если выражение равно МК, то выполняются операторы Sk, Sk+1 Sn , S;
б - если выражение равно LK, то выполняются только операторы Sk
Операторы вслед за defaultвыполняются, если значение выражения в скобках после switchне совпало ни с одной константой после case.Метка defaultможет в переключателе отсутствовать. В этом случае при несовпадении значения выражения с константами переключатель не выполняет никаких действий. Операторы, помеченные меткой default,не обязательно находятся в конце (после других вариантов переключателя). Уточним, что defaultи"caseконстанта" не являются метками в обычном смысле. К ним, например, нельзя перейти с помощью оператора goto.
На рис. 2.6 приведены схемы переключателя (рис. 2.6, а) и оператора альтернативного выбора или селектора (рис. 2.6 , б), отсутствующего в языке Си.
На рис. 2.7 изображена схема альтернативного выбора, реализованная при помощи переключателя и дополнительных операторов, введенных в S1, S2,..., Sn.
Рис.2.7. Альтернативный выбор с использованием переключателя. В число операторов каждой группы Sk добавлен оператор выхода из переключателя
Для иллюстрации работы переключателя рассмотрим программу, которая читает любую десятичную цифру и выводит на экран ее название:
Пример результатов выполнения программы:
Программа прекращает выполнение, как только будет введен символ, отличный от цифры. Завершение программы обеспечивает оператор return;который в данном случае передает управление операционной системе, так как выполняет выход из функции main( ).
Переключатель вместе с набором операторов breakреализует в этой программе альтернативный выбор (см. рис. 2.7). Если удалить все операторы break,то работа переключателя в этой программе будет соответствовать схеме рис. 2.6, а.
Несколько "меток" caseс разными значениями констант могут помечать один оператор внутри переключателя, что позволяет еще больше разнообразить схемы построения операторов switch.