Конструкция switch..case


Другую форму организации ветвления программ представляет конструкция switch...case. Она имеет следующую форму:

switch(выражение)
{
    case константа_1: инструкции_1;
    case константа_2: инструкции_2;
     
    default: инструкции;
}

После ключевого слова switch в скобках идет сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями после оператора сase. И если совпадение будет найдено, то будет выполняться определенный блок сase.




В конце конструкции switch может стоять блок default. Он необязателен и выполняется в том случае, если значение после switch не соответствует ни одному из операторов case. Например:

#include <iostream>
using namespace std;
int main()
{
    int x = 2;
    switch(x)
    {
        case 1:
            cout << "x = 1" << "\n";
            break;
        case 2:
            cout << "x = 2" << "\n";
            break;
        case 3:
            cout << "x = 3" << "\n";
            break;
        default:
            cout << "x is undefined" << "\n";
            break;
    }
    return 0;
}

Чтобы избежать выполнения последующих блоков case/default, в конце каждого блока ставится оператор break. То есть в данном случае будет выполняться оператор

case 2:
    cout << "x = 2" << "\n";
    break;

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

x = 2

Стоит отметить важность использования оператора break. Если мы его не укажем в блоке case, то после этого блока выполнение перейдет к следующему блоку case. Например, уберем из предыдущего примера все операторы break:

#include <iostream>
using namespace std;
int main()
{
    int x = 2;
    switch(x)
    {
        case 1:
            cout << "x = 1" << "\n";
        case 2:
            cout << "x = 2" << "\n";
        case 3:
            cout << "x = 3" << "\n";
        default:
            cout << "x is undefined" << "\n";
    }
    return 0;
}

В этом случае опять же будет выполняться оператор case 2:, так как переменная x=2. Однако так как этот блок case не завершается оператором break, то после его завершения будет выполняться набор инструкций после case 3: даже несмотря на то, что переменная x по прежнему равна 2. В итоге мы получим следующий консольный вывод:



Последнее изменение: Thursday, 26 January 2023, 15:50