На этом шаге мы рассмотрим синтаксис и применение оператора 
switch.
При решении задач достаточно часто приходится осуществлять выбор одного из нескольких вариантов. Это можно сделать с помощью конструкций if...else, но во многих случаях оказывается более удобным применять оператор switch, общий вид которого следующий:
     switch (<переключающее выражение>)
        { 
          case  <константное_выражение_1>: 
                                           <операторы_1>;
          case  <константное_выражение_2>: 
                                           <операторы_2>;
                .   .   .   .   .   .
          case  <константное_выражение_n>: 
                                           <операторы_n>;
          default: <операторы>;
        }
Управляющая конструкция switch передает управление к тому из помеченных с помощью case операторов, для которого значение константного выражения совпадает со значением переключающего выражения. Переключающее выражение должно быть целочисленным или его значение приводится к целому. Значения константных выражений, помещаемых за служебными словами case, приводятся к типу переключающего выражения. В одном переключателе все константные выражения должны иметь различные значения, но быть одного типа. Любой из операторов, помещенных в фигурных скобках после конструкции switch (...), может быть помечен одной или несколькими метками case. Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к оператору, отмеченному меткой default. В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В этом случае при несовпадении переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов.
Метки не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выход из переключателя, то в нем последовательно выполняются все операторы, начиная с той метки, на которую передано управление.
Проиллюстрируем указанную особенность на следующем примере: составить программу, выводящую названия нечетных целых цифр, не меньших заданной.
    #include<iostream.h>
    void main()
    {   int ic;
        cout << "\nВведите любую десятичную цифру: ";
        cin >> ic;
        cout << '\n';
        switch (ic)
        {  case 0: case 1: cout << "один, ";
           case 2: case 3: cout << "три, ";
           case 4: case 5: cout << "пять, ";
           case 6: case 7: cout << "семь, ";
           case 8: case 9: cout << "девять ";
                                   break; //Выход из переключателя.
                  default: cout << "Ошибка! Это не цифра! ";
         }
    }
Пусть, например, была введена цифра 6. Компьютер "найдет" метку case 6 и выполнит все операторы, идущие за этой меткой:
     case 7: cout << "семь, ";
     case 8: 
     case 9: cout << "девять ";
Таким образом, на экран будет выведено: семь, девять.
Приведенная программа также иллюстрирует действие оператора break, о котором более подробно мы поговорим на 33 шаге. С его помощью осуществляется выход из переключателя. Если поместить оператор break после вывода каждой цифры, то программа будет печатать название только одной нечетной цифры.
Приведем несколько примеров использования оператора switch.
#include<iostream.h> main () { int c; cout << "Введите цифру от 1 до 7: "; cin >> c; cout << "\nСоответствующий день недели:"; switch (c) { case 1 : cout << "\nПонедельник - день тяжелый!"; break; case 2 : cout << "\nВторник!"; break; case 3 : cout << "\nСреда!"; break; case 4 : cout << "\nЧетверг!"; break; case 5 : cout << "\nПятница!"; break; case 6 : cout << "\nСуббота!"; break; case 7 : cout << "\nВоскресенье! Ура!"; break; default : cout << "\nЭто не цифра от 1 до 7"; } }
Обратите внимание, что если после метки с двоеточием идет несколько операторов, то их необязательно помещать в блок с помощью скобок { и }.
Напомним, что если не использовать оператор завершения break, то по окончании выполнения списка операторов выбранного варианта произойдет переход на следующий вариант из списка.
#include<iostream.h> main () { char c; cout << "Введите русскую заглавную букву (от 'А' до 'Д'): "; cin >> c; cout << "\nРасширьте свой кругозор!"; switch (c) { case 'А': cout << "\nАргали,дикий горный азиатский баран"; case 'Б': cout << "\nБабирусса,дикая малайская свинья"; case 'В': cout << "\nВыхухоль,водоплавающий крот"; case 'Г': cout << "\nГиббон,длиннорукая обезьяна"; case 'Д': cout << "\nДаман древесный"; default : cout << "\nНа первый раз достаточно!"; } }
Если для нескольких значений выражения в операторе switch требуется выполнить одну и ту же последовательность операторов, то в списке вариантов следует подряд перечислить эти варианты с пустым списком операторов для всех вариантов, кроме последнего.
#include<iostream.h> main () { char c; cout << "Нажмите любую из клавиш 'А,Б,В,Г,Д': "; cin >> c; cout << "\nРасширьте свой кругозор!"; switch (c) { case 'a': case 'A': case 'а': case 'А': cout << "\nАргали,дикий горный азиатский баран"; case 'b': case 'B': case 'б': case 'Б': cout << "\nБабирусса,дикая малайская свинья"; case 'w': case 'W': case 'в': case 'В': cout << "\nВыхухоль,водоплавающий крот"; case 'g': case 'G': case 'г': case 'Г': cout << "\nГиббон,длиннорукая обезьяна"; case 'd': case 'D': case 'д': case 'Д': cout << "\nДаман древесный"; default : cout << "\nНа первый раз достаточно!"; } }
Результат работы программы:
Нажмите любую из клавиш 'А,Б,В,Г,Д': b Расширьте свой кругозор! Бабирусса, дикая малайская свинья Выхухоль, водоплавающий крот Гиббон, длиннорукая обезьяна Даман древесный На первый раз достаточно!
   
На следующем шаге мы начнем изучение циклических конструкций.