654_____________________________________________Глава

11.8.1.2 Условный оператор множественного выбора switch

Оператор switch позволяет провести анализ значения некоторого выражения i
в зависимости от его значения выполнить те или иные действия. В общем случж
формат записи оператора switch следующий:

switch (выражение_выбора) (
case значение_1 : оператор 1;

break;      // не обязательно

case значение_п : оператор_п;

break;      // не обязательно

default : оператор;           // не обязательно
)

В этой конструкции выражение выбора должно иметь порядковый тип — целый,
перечислимый и т.д. Поэтому, например, нельзя использовать выражения, возвраща-
ющие действительные числа или строки.

Значения, указываемые в метках case, должны быть константными выраже-
ниями, соответствующими возможным значениям выражения выбора. После зна-
чения ставится двоеточие «:», а затем пишется оператор (может писаться состав-
ной оператор), который должен выполняться, если выражение приняло указанное
в метке значение.

Если значение выражения выбора совпало со значением, указанным в оцг/'
из меток case, то выполняется оператор, записанный после этой метки, после чег
если не принять соответствующих мер, будут выполняться все последующие о;:

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

break;

Он прерывает выполнение структуры switch и управление передается следую-
щему за ней оператору.

Если значение выражения выбора не соответствует ни одному из перечислен
ных в метках, то выполняется оператор, следующий за меткой default. Впроче:

метка default не обязательно должна включаться в структуру switch. В этом с."
чае, если не нашлось соответствующего значения выражения выбора, то ни одг
оператор не будет выполнен.

Значения в метках могут содержать константы и константные выражения, У.
торые совместимы по типу с объявленным выражением и которые компилятор у
жет вычислить заранее, до выполнения программы. Недопустимо использован;

переменных и многих функций. В метках не допускается повторение одних и т.
же значений, поскольку в этом случае выбор был бы неоднозначным.

Приведенный ниже пример анализирует переменную Key типа char, содерж;

щую символ, введенный пользователем в ответ на некоторый вопрос. При поло»;:

тельном ответе вызывается процедура FYes, при отрицательном — FNo, при инь:

ответах отображается сообщение об ошибке.

switch (Key) (

case 'у': case 'У: ( FYes(); break; )

case 'n': case 'N': { FNo(); break; }

default : ShowMessage("Ошибочный ответ");

}

Обратите внимание, что при необходимости выполнять одинаковые действ;:

при нескольких значениях выражения выбора, надо размещать подряд несколы
меток case.