Конструкция 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. В итоге мы получим следующий консольный вывод:
