Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Структурная схема оператора приведена на рис. 4.3.
Формат оператора:
switch (выражение)
{
case константное_выражение_1: [ список_операторов_1 ]
case константное_выражение_2: [ список_операторов_2 ]
case константное_выражение_n: [ список_операторов_n ]
[ default: операторы ]
}
Выполнение оператора начинается с вычисления выражения. Тип выражения чаще всего целочисленный (включая char) или строковый1. Затем управление передается первому оператору из списка, помеченному константным выражением, значение которого совпало с вычисленным.
Все константные выражения должны быть неявно приводимы к типу выражения в скобках. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).
Каждая ветвь переключателя должна заканчиваться явным оператором перехода, а именно оператором break, goto или return:
|
|
□ оператор break выполняет выход из самого внутреннего из объемлющих его
операторов switch, for, while и do (см. раздел «Оператор break», с. 84);
□ оператор goto выполняет переход на указанную после него метку, обычно это
метка case одной из нижележащих ветвей оператора switch (см. раздел «Опе
ратор goto», с. 83);
□ оператор return выполняет выход из функции, в теле которой он записан (см.
раздел «Оператор return», с. 87).
Оператор goto обычно используют для последовательного выполнения нескольких ветвей переключателя, однако поскольку это нарушает читабельность программы, такого решения следует избегать.
В листинге 4.2 приведен пример программы, реализующей простейший калькулятор на четыре действия.
bool ok = true;
double res, a, b;
char op = '-';
switch (op)
{
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
default: res = double.NaN; ok - false; break;
}
Оператор switch предпочтительнее оператора if в тех случаях, когда в программе требуется разветвить вычисления на количество направлений большее двух и выражение, по значению которого производится переход на ту или иную ветвь, не является вещественным. Часто это справедливо даже для двух ветвей, поскольку повышает наглядность программы