Лекция 5

Оператор выбора switch()

Оператор выбора (переключатель, оператор принятия решения) switch() является наиболее удобным средством для организации мультиветвления. Оператор switch() выполняет действие, основываясь на сравнении значения ключа со значениями констант-символов или констант-целых чисел (константных выражений). Синтаксис оператора выбора switch():

switch(<выражение–ключ>)

{

case <константное_выражение1>:

операторы1;

break;

case <константное_выражение2>:

операторы2;

break;

default:

операторыV;

}

<выражение–ключ> – выражение любого типа; результатом вычисления этого выражения может быть значение целого или символьного типа.

Правила работы оператора switch():

1. Вычисляется значение <выражение–ключ>.

2. Это значение последовательно сравнивается со значением каждого из <константного_выражения>, следующих после каждого case.

3. Если значения ключа и какого-либо <константного_выражения> совпали, то выполняются все операторы, следующие за этим case.

4. Если в этом case встретился оператор break, то оператор switch() прекращает работу. Если в этом case нет оператора break, то будут выполняться все операторы, следующие либо после этого case, либо до ближайшего оператора break, либо до конца оператора switch() при отсутствии операторов break.

5. Если не найдено ни одного совпадения ключа и одного из <константного_выражения>, то будут выполняться все операторы, следующие за оператором default.

Значения константных выражений, помещаемых за служебными словами case, приводятся к типу ключа. В одном переключателе все константы должны иметь различные значения, но быть одного типа. Любой из операторов, помещённых в фигурных скобках после конструкции switch(), может быть помечен одной или несколькими метками вида

case <константное_выражение>:

В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В случае её отсутствия при несовпадении переключающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов. Сами по себе метки case <константное_выражение>: и default не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выходы из переключателя, то в нём последовательно выполняются все операторы, начиная с той метки, на которую передано управление. С помощью оператора break выполняется выход из переключателя. Операторы break являются не обязательными в операторе switch(). Они используются для окончания работы последовательности операторов, предшествующих этому break. Если break отсутствует, продолжаются выполняться операторы следующего раздела, пока не будет достигнут оператор break или конец оператора switch().

Оператор switch() отличается от условного оператора if() тем, что он может выполнять только операции проверки строгого равенства, в то время как if() может проверять логические выражения.