Переключатели
Основным средством для организации мультиветвления служит оператор-переключатель, формат которого имеет вид:
switch (выражение)
{ case константа1: операторы_1;
case константа2: операторы_2;
.................
default: операторы;
}
В этом операторе используются три служебных слова: switch, case, default Первое из них идентифицирует собственно оператор-переключатель. Служебное слово case с последующей константой является в некотором смысле меткой. Константы могут быть целыми или символьными и все должны быть различными (чтобы метки были различимы). Служебное слово default также обозначает отдельную метку. При выполнении оператора вычисляется выражение, записанное после switch, и его значение последовательно сравнивается с константами, которые помещены вслед за case. При первом же совпадении выполняются операторы, помеченные данной меткой. Если выполненные операторы не предусматривают какого-либо перехода (т.е. среди них нет ни goto, ни return, ни exit(), ни break), то далее выполняются операторы всех следующих вариантов, пока не появится оператор перехода или не закончится переключатель.
Операторы вслед за default выполняются, если значение выражения в скобках после switch не совпало ни с одной константой после case. Метка default может в переключателе отсутствовать. В этом случае при несовпадении значения выражения с константами переключатель не выполняет никаких действий. Операторы, помеченные меткой default, не обязательно находятся в конце (после других вариантов переключателя). Уточним, что default и "case константа" не являются метками в обычном смысле. К ним, например, нельзя перейти с помощью оператора goto.
На рис. 2.6 приведены схемы переключателя (рис. 2.6, а) и оператора альтернативного выбора или селектора (рис. 2.6, б), отсутствующего в языке Си.
На рис. 2.7 изображена схема альтернативного выбора, реализованная при помощи переключателя и дополнительных операторов, введенных в S1 , S2,...,Sn.
Для иллюстрации работы переключателя рассмотрим программу, которая читает любую десятичную цифру и выводит на экран ее название:
#include <stdio.h>
void main( )
{
int i;
while(1)
{
printf("\n Введите десятичную цифру: ") ;
scanf ("%d”,&i) ;
printf("\t\t") ;
switch( i )
{
case 1: printf("%d -один \n",i);
break;
case 2: printf ("%d - два \n",i);
break;
case 3: printf ("%d - три \n",i);
break;
case 4: printf("%d - четыре \n",i);
break; .
case 5: printf("%d - пять \n",i);
break;
саsе 6: printf("%d - шесть \n",i);
break;
case 7: printf("%d - семь \n",i);
break;
case 8: printf("%d - восемь \n",i);
break;
case 9: printf("%d - девять \n",i);
break;
case 0: printf("%d - нуль \n",i);
break;
default: printf("%d - это не цифра! \n",i);
return;
} /* Конец переключателя */
} /* Конец цикла */
Программа прекращает выполнение, как только будет введен символ, отличный от цифры. Завершение программы обеспечивает оператор return; который в данном случае передает управление операционной системе, так как выполняет выход из функции main().
Переключатель вместе с набором операторов break реализует в этой программе альтернативный выбор (см. рис. 2.7). Если удалить все операторы break, то работа переключателя в этой программе будет соответствовать схеме рис. 2.6, а.
Несколько "меток" case с разными значениями констант могут помечать один оператор внутри переключателя, что позволяет еще больше разнообразить схемы построения операторов switch.
Дата добавления: 2015-10-09; просмотров: 671;