Оператор switchуправляющий оператор языка Си, реализующий алгоритмическую структуру выбор.
Часто в программах необходимо произвести выбор одного из нескольких вариантов дальнейших действий. Это можно сделать, используя конструкцию, состоящую из цепочки операторов if-else, но во многих случаях оказывается более удобным использование оператора switch.
Синтаксис оператора switch определен следующим образом:
switch (выражение)
     {
      case константа1: операторы
      case константа2: операторы
       . . .
      default:         операторы
      }
Выражение в скобках должно быть целого типа (можно использовать символьные константы, так как их тип целый). Выражение вычисляется и сравнивается с различными константами, записанными после ключевого слова case. Допускается использование констант целого или символьного типа или константное выражение указанных типов (например, 5, 'a', 2048/512). Если подходящая константа найдена, вычисления продолжаются с оператора, следующего за словом case, соответствующим этой константе. Затем выполняются все последующие операторы вплоть до появления оператора break или завершающей оператор switch скобки }. Метки case могут располагаться в любом порядке, но значения соответствующих констант должны быть различными.
switch, case, default и breakключевые слова. Оператор break вызывает немедленный выход из оператора switch. Распространенная ошибка состоит в пропуске оператора break, когда необходим выход из оператора switch.
Метка default может отсутствовать. Если же она есть и среди указанных констант не найдено подходящей, управление передается операторам, следующим за меткой default. Если default отсутствует и среди указанных констант не найдено подходящей, оператор switch пропускается.
Рис. 1.  Сравнение операторов switch и if
При использование оператора switch константы четко выделены, в противоположность операторам if-else, где они разбросаны по тексту. Разница в удобочитаемости возрастает с увеличением числа анализируемых случаев.
Если значение в операторе switch совпадает с одной из констант, вычисления продолжаются после соответствующей метки. Последующие операторы выполняются до тех пор, пока не встретится оператор break, не зависимо от того, предшествуют этим операторам какие-либо метки case. Говорят, что выполнение "проваливается", если не встретился оператор break. В прим. 1 демонстрируется особенность оператора switch.
Пример 1
input = getchar();
switch (input)
{
case 'a':
case 'A': add_record();
          break;
case 'd':
case 'D': find_record();
          delete_record();
          break;
case 'u':
case 'U': find_record();
          query_change();
          change_record();
          break;
default:  printf("Illegal choice\n");
          break;
}
Когда требуется использовать оператор switch, а когда конструкцию if-else? Нельзя применять оператор switch, когда выбор вариантов основан на вычислении значения переменной или выражения вещественного типа. Удобного способа применить оператор switch в случае, когда возможные значения переменной попадают в некоторый диапазон, также не существует. Проще написать, например, так:
if (integer < 1000 && integer > 2)
При замене этой строки оператором switch придется ввести в программу метки для всех целых чисел от 3 до 999. Тем не менее, если есть возможность использования оператора switch, ею надо воспользоваться, так как программа будет выполняться более эффективно.