Студенту >> Язык программирования Си


Множественный выбор. Оператор переключения

Для осуществления операций в зависимости от значения некоторой переменной целого типа в языке Си существует специальный оператор "switch" -переключатель. Используя этот оператор, вместо вложенных "if" в предыдущей программе можно записать следующую конструкцию:

      switch ( choice )
      {
         case 1 : fun=sin(x);   break;
         case 2 : fun=cos(x);   break;
         case 3 : fun=tan(x);   break;
         case 4 : loop=0;       break;
         default: printf( "Неверный выбор\n" ); break;
      }

Здесь ключевое слово "case" (случай) указывает на то, что следующая константа является значением переменной choice, для которого выполняются соответствующие действия.

Оператор "break;" осуществляет выход из оператора "switch", а не из цикла. Именно поэтому для выхода из цикла пришлось использовать специальный флаг loop.

Ключевое слово "default" ( умолчание ) означает, что следом записаны действия, выполняющиеся, если значение choice не совпадет ни с одной из констант, указанных за "case".

Оператор switch в общем виде выглядит так:

    БНФ:
         оператор_переключения =

            "switch" "(" выражение ")"
            "{"
                  "case" константа ":" { оператор }
                  "case" константа ":" { оператор }
                [ "default"        ":" { оператор } ]
            "}"

В качестве выражения можно использовать любое выражение, имеющее символьный или целый тип.

Константы тоже должны быть символьного или целого типа, например case 4 , case 'A'.

Допускается использовать несколько констант для пометки одной группы операторов, например

                  case 2 :
                  case 4 :
                  case 8 : f = sin(x); break;

Если группа операторов не завершается оператором break, то будут выполняться все последующие операторы независимо от наличия case с константами до ближайшего break или другого оператора, прерывающего естественную последовательность действий. Иными словами ключевое слово case с константой надо рассматривать как метку для передачи управления. Так, в следующем операторе

      switch( ch )
      {
         case 'A' :
         case 'B' :  x++;
         case 'C' :
         case 'D' :  f = sin(x);   break;
         case 'E' :  f = cos(x);   break;
      }

будет вычислено f=sin(x+1), при ch равном 'A' или 'B'; f=sin(x), при ch равном 'C' или 'D'; f=cos(x), при ch равном 'E'.

При использовании оператора switch необходимо внимательно следить за правильностью написания ключевого слова default и за тем, чтобы между ключевым словом case и числовой константой обязательно имелся пробел. В противном случае, эти конструкции будут приняты за правильно записанные метки для оператора goto, и компилятор не выдаст никакой диагностики.

НАВЕРХ