Этот оператор используется в случае, если необходим выбор из множества вариантов выполнения программы в зависимости от значения выражения. То же самое можно реализовать последовательностью вложенных операторов if…else, но это будет неудобно с точки зрения чтения программы и неэффективно с точки зрения её выполнения. Синтаксис оператора switch представлен ниже.
switch (выражение) {
case константа1:
последовательность инструкций;
break;
case константа2:
последовательность инструкций;
break;
case константаN:
последовательность инструкций;
break;
default:
последовательность инструкций;
}
Выражение, которое используется для выбора ветви выполнения должно возвращать целый или символьный результат. Оно вычисляется в начале выполнения оператора switch. Затем последовательно проверяются значения констант, указанных в case-ветвях. При совпадении значения константы со значением выражения управление передаётся в соответствующую ветвь. Инструкции из этой ветви выполняются до тех пор, пока не встретится оператор break, который прерывает выполнение оператора switch.
Если ни одна из констант не совпадает с результатом вычисления выражения, то выполняется ветвь default (которая является необязательной и может быть не задана).
Здесь пользователь вводит символ (если введены несколько – считан будет только первый), который проверяется в операторе switch. Если введён непредусмотренный символ, то будет выполнена ветвь default.
Предостережение! Нельзя забывать завершать ветви оператором break. Если этого не сделать, то после того, как будут выполнены все инструкции в текущей ветви, программа «провалится» в следующую ветвь и начнёт выполнять инструкции из нее независимо от значения константы, заданного в case. Например, при выполнении нижеприведённого оператора если пользователь введет '+', то ему выведутся результаты сначала сложения, а потом – вычитания и умножения. И только потом встретится break, который прервет выполнение.
switch (c) {
case '+':
cout << "10 + 5 = " << a + b;
case '-':
cout << "10 - 5 = " << a - b;
case '*':
cout << "10 * 5 = " << a * b;
break;
case '/':
cout << "10 / 5 = " << a / b;
break;
default:
cout << "Введён неверный символ";
}
Эта особенность оператора switch иногда осознанно используется в программах. В таких случаях необходимо комментировать подобные места, чтобы программисты, разбирающиеся в программе, не приняли их за ошибки.
Оператор switch допускает пустые ветви case, что позволяет для нескольких констант выполнять одну последовательность инструкций. Например: