Мы рассмотрели структуру с единственным выбором if (). Но порой алгоритм может содержать ряд альтернативных решений, причем некоторую переменную (или выражение) надо проверять отдельно для каждого постоянного целого значения, которое она может принимать, и в зависимости от результатов этой проверки должны выполняться различные действия. Для принятия подобных решений в C++ имеется структура множественного выбора switch ().

Структура switch () состоит из ряда меток case и необязательной метки default (умолчание). Программа, приведенная ниже, использует switch () для перевода различных буквенных оценок, полученных студентами на экзамене, в цифровые.

/* программа, выполняющая перевод буквенных оценок в цифровые */ #include void main() < char cRate; cout >cRate; switch (cRate) < case ‘A’: cout >. Далее начинает работать структура switch (). За ключевым словом switch следует в скобках имя переменной cRate. Это так называемое управляющее выражение. Предположим, пользователь ввел в качестве оценки букву «С». «С» автоматически сравнивается с каждым условием case в структуре switch. Если встречается совпадение (case ‘С’:), то выполняется оператор, следующий за этой меткой case. В случае буквы «С» на экран выводится сообщение «Your rate is 3» и работа структуры switch немедленно завершается по оператору break. Оператор break вызывает передачу программного управления на первый оператор после структуры switch. Оператор break используется потому, что в противном случае условия case в операторе switch работают совместно. Если везде в структуре switch не использовать break, тогда каждый раз, когда одно из условий case удовлетворяется, будут выполняться операторы всех последующих меток case. Если ни одно условие не выполнено, то выполняются операторы после метки default (умолчание), печатающие в нашей программе сообщение об ошибке.

После каждой метки case может быть предусмотрено одно или более действий. В общем случае структура множественного выбора switch() при использовании break в каждом разделе case соответствует блок-схеме, приведенной ниже

Из этой блок-схемы видно, что каждый оператор break в конце case вызывает немедленный выход из структуры switch.

Не нашли то, что искали? Воспользуйтесь поиском:

Лучшие изречения: Да какие ж вы математики, если запаролиться нормально не можете. 8445 — | 7338 — или читать все.

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

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

Поэтому знание и умение использовать оператор выбора Case важно в багаже знаний любого программиста.

Для начало определим, чем же является оператор вариантов ( выбора ).

Оператор выбора Case – это форма условного оператора (А условные оператор, как нам уже известно, используется в разветвляющихся вычислительных процессах), используемая для множественного выбора.

Иногда оператор Case называют еще оператором множественного выбора. Верны оба названия. Суть от них не меняется.

Оператор выбора на блок-схеме

Основы оператора выбора Case

Определимся с основными понятиями, изображенными на блок-схеме.

Селектор – это переменная или выражение порядкового типа данных.

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

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

К порядковому типу данных не относиться только вещественный тип ( real ).

В качестве меток используется одно из значений селектора.

Это значит, что селектор каким-то образом изменяет свое значение, а эти значения уже известны, и они уже присвоены меткам. В таком случае значение селектора совпадает с какой-либо меткой, и затем выполняется действие, указанное после метки.

Если действие должно выполняться при нескольких значениях селектора ( оператора case ), то допускается перечисление этих меток через запятую. ( Т.е. для одинаковых действий )

В операторе case можно использовать служебное слово else , если не выполняется ни одно действие по заданному значению селектора.

Если после метки стоит не одни оператор, а несколько, то они заключаются в операторные скобки ( begin – end 😉

Предоставляю вашему вниманию задачу на вычисление суммы цифр в числе. Часто встречается такое условие в лабораторных работах.

Позволяет выбирать между несколькими разделами кода в зависимости от значения целочисленного выражения. Allows selection among multiple sections of code, depending on the value of an integral expression.

Синтаксис Syntax

Примечания Remarks

Выражение должен быть целочисленного типа или типа класса, для которого имеется однозначное преобразование в целочисленный тип. The expression must be of an integral type or of a class type for which there is an unambiguous conversion to integral type. Выполняется восходящее приведение, как описано в разделе стандартные преобразования. Integral promotion is performed as described in Standard Conversions.

Переключения тела оператора состоит из ряда случай метки и необязательного по умолчанию метки. The switch statement body consists of a series of case labels and an optional default label. Никакие два константных выражения в случай операторы могут оценивать то же значение. No two constant expressions in case statements can evaluate to the same value. По умолчанию метки может использоваться только один раз. The default label can appear only once. Операторы с меткой не являются синтаксическим требованием, но переключения оператор не имеет смысла без них. The labeled statements are not syntactic requirements, but the switch statement is meaningless without them. Оператор по умолчанию не всегда стоит в конце; он может отображаться в любой части оператора switch. The default statement need not come at the end; it can appear anywhere in the body of the switch statement. Метка case или default может отображаться только внутри оператора switch. A case or default label can only appear inside a switch statement.

Константное_выражение в каждом случай метка преобразуется в тип выражение и сравнивается с выражение для проверки на равенство. The constant-expression in each case label is converted to the type of expression and compared with expression for equality. Управление передается оператору, случай константное_выражение совпадает со значением выражение. Control passes to the statement whose case constant-expression matches the value of expression. Поведение, полученное в результате, показано в следующей таблице. The resulting behavior is shown in the following table.

Поведение оператора switch Switch Statement Behavior

Условие ConditionДействие Action
Преобразованное значение соответствует значению выражения управления с повышенным уровнем. Converted value matches that of the promoted controlling expression.Управление передается оператору, следующему за этой меткой. Control is transferred to the statement following that label.
Ни одна из констант не соответствуют константам в случай метки; по умолчанию имеется метка. None of the constants match the constants in the case labels; a default label is present.Управление передается по умолчанию метки. Control is transferred to the default label.
Ни одна из констант не соответствуют константам в случай меток; по умолчанию отсутствует метка. None of the constants match the constants in the case labels; default label is not present.Управление передается инструкции после переключения инструкции. Control is transferred to the statement after the switch statement.

Если соответствующее выражение найдено, элемент управления не препятствуют последующие случай или по умолчанию метки. If a matching expression is found, control is not impeded by subsequent case or default labels. Break оператор используется для остановки выполнения и передать управление в оператор после переключения инструкции. The break statement is used to stop execution and transfer control to the statement after the switch statement. Без break инструкции, каждый оператор из сопоставленной случай метки в конец переключения, в том числе по умолчанию, — выполнен. Without a break statement, every statement from the matched case label to the end of the switch, including the default, is executed. Пример: For example:

В предыдущем примере capa увеличивается инкрементно, если c — A в верхнем регистре. In the above example, capa is incremented if c is an uppercase A . Break инструкции после capa++ прекращает выполнение переключения тело оператора и элемент управления передает хотя цикла. The break statement after capa++ terminates execution of the switch statement body and control passes to the while loop. Без break инструкцию, выполнение будет «проваливания» к следующему оператору с меткой, таким образом, чтобы lettera и nota также должны быть инкрементированы. Without the break statement, execution would "fall through" to the next labeled statement, so that lettera and nota would also be incremented. Аналогичные цели обслуживается break инструкции для case ‘a’ . A similar purpose is served by the break statement for case ‘a’ . Если c — в нижнем регистре a , lettera увеличивается и break оператор завершает переключения тела оператора. If c is a lowercase a , lettera is incremented and the break statement terminates the switch statement body. Если c не a или A , по умолчанию выполняется инструкция. If c is not an a or A , the default statement is executed.

Visual Studio 2017 и более поздних версий: (состав /std: c ++ 17) [[fallthrough]] атрибут указан в стандарте C ++ 17. Visual Studio 2017 and later: (available with /std:c++17) The [[fallthrough]] attribute is specified in the C++17 standard. Он может использоваться в переключения инструкции как подсказку для компилятора (или код более удобочитаемым) предназначена, поведение. It can be used in a switch statement as a hint to the compiler (or to anyone reading the code) that fall-through behavior is intended. Microsoft C++ компилятора в настоящее время не предупреждать о fallthrough поведение, поэтому этот атрибут не влияет на поведение компилятора. The Microsoft C++ compiler currently does not warn on fallthrough behavior, so this attribute has no effect on compiler behavior. Обратите внимание, что атрибут применяется к пустого оператора с меткой инструкции; Другими словами, точка с запятой не требуется. Note that the attribute is applied to an empty statement within the labeled statement; in other words the semicolon is necessary.

Visual Studio 2017 версии 15.3 и более поздние версии (состав /std: c ++ 17): Оператор switch может представить и инициализировать переменную, область действия которого ограничивается в блок оператора switch: Visual Studio 2017 version 15.3 and later (available with /std:c++17): A switch statement may introduce and initialize a variable whose scope is limited to the block of the switch statement:

Внутренний блок переключения оператор может содержать определения с инициализациями при условии, что они доступны, то есть не пропускает все возможные пути выполнения. An inner block of a switch statement can contain definitions with initializations as long as they are reachable — that is, not bypassed by all possible execution paths. Имена, добавленные с помощью этих объявлений, имеют локальную область видимости. Names introduced using these declarations have local scope. Пример: For example:

Объект переключения инструкции могут быть вложенными. A switch statement can be nested. В таких случаях случай или по умолчанию метки связать с ближайшим переключения инструкцию, которая содержит их. In such cases, case or default labels associate with the closest switch statement that encloses them.

Блок, относящийся только к системам Microsoft Microsoft Specific

Microsoft C не ограничивает количество значений case в переключения инструкции. Microsoft C does not limit the number of case values in a switch statement. Это число ограничивается только объемом доступной памяти. The number is limited only by the available memory. ANSI C требует по крайней мере 257 меток case разрешен в переключения инструкции. ANSI C requires at least 257 case labels be allowed in a switch statement.

В Microsoft C расширения Microsoft по умолчанию включены. The default for Microsoft C is that the Microsoft extensions are enabled. Используйте /Za параметр компилятора для отключения этих расширений. Use the /Za compiler option to disable these extensions.

Завершение блока, относящегося только к системам Майкрософт END Microsoft Specific