Switch c что это за программа

Содержание
Читайте также:
Sharepoint designer что за программа

Оператор switch предназначен для организации выбора из множества различных вариантов. Формат оператора следующий:

1 2 3 4 5 6 7 8 9
switch ( выражение ) { [объявление] : [ case константное-выражение1]: [ список-операторов1] [ case константное-выражение2]: [ список-операторов2] : : [ default: [ список операторов ]] }

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

Значение этого выражения является ключевым для выбора из нескольких вариантов. Тело оператора smitch состоит из нескольких операторов, помеченных ключевым словом case с последующим константным-выражением. Следует отметить, что использование целого константного выражения является существенным недостатком, присущим рассмотренному оператору.

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

SWITCH C# | ЧТО ЭТО | ПРИМЕР | СИНТАКСИС | ОПЕРАТОР МНОЖЕСТВЕННОГО ВЫБОРА | C# 15

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

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

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

Схема выполнения оператора switch следующая:

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

— если ни одно из константных выражений не равно выражению, то управление передается на оператор, помеченный ключевым словом default, а в случае его отсутствия управление передается на следующий после switch оператор.

Отметим интересную особенность использования оператора switch: конструкция со словом default может быть не последней в теле оператора switch. Ключевые слова case и default в теле оператора switch существенны только при начальной проверке, когда определяется начальная точка выполнения тела оператора switch. Все операторы, между начальным оператором и концом тела, выполняются вне зависимости от ключевых слов, если только какой-то из операторов не передаст управления из тела оператора switch. Таким образом, программист должен сам позаботится о выходе из case, если это необходимо. Чаще всего для этого используется оператор break.

Читайте также:
Пакет ansys что это за программа

Switch. Что это. Пример. Синтаксис. Оператор множественного выбора. Урок #13.

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

1 2 3 4 5 6 7 8 9
int i=2; switch (i) { case 1: i += 2; case 2: i *= 3; case 0: i /= 2; case 4: i -= 5; default: ; }

Выполнение оператора switch начинается с оператора, помеченного case 2. Таким образом, переменная i получает значение, равное 6, далее выполняется оператор, помеченный ключевым словом case 0, а затем case 4, переменная i примет значение 3, а затем значение -2. Оператор, помеченный ключевым словом default, не изменяет значения переменной.

Рассмотрим ранее приведенный пример, в котором иллюстрировалось использование вложенных операторов if, переписанной теперь с использованием оператора switch.

1 2 3 4 5 6 7 8 9 10
char ZNAC; int x,y,z; switch (ZNAC) { case ‘+’: x = y + z; break; case ‘-‘: x = y — z; break; case ‘*’: x = y * z; break; case ‘/’: x = u / z; break; default : ; }

Использование оператора break позволяет в необходимый момент прервать последовательность выполняемых операторов в теле оператора switch, путем передачи управления оператору, следующему за switch.

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

1 2 3 4 5 6 7 8 9 10 11 12 13
: switch (a) { case 1: b=c; break; case 2: switch (d) { case 0: f=s; break; case 1: f=9; break; case 2: f-=9; break; } case 3: b-=c; break; : }

1.4.6. Оператор break
Оператор break обеспечивает прекращение выполнения самого внутреннего из объединяющих его операторов switch, do, for, while. После выполнения оператора break управление передается оператору, следующему за прерванным.

C++. Оператор выбора switch

Оператор выбора switch позволяет выбрать один вариант хода решения задачи из нескольких в зависимости от значения выражения. Таким образом, обеспечивается многонаправленное разветвление в программе.

Оператор switch может быть заменен оператором if . Однако, в некоторых случаях использование оператора switch может быть более эффективным, чем использование оператора if .

2. Общая форма описания оператора выбора switch . Ключевые слова switch , case , break , default

Общая форма записи оператора switch следующая

switch (выражение) < case константа1: последовательность_операторов1; break; case константа2: последовательность_операторов2; break; . case константаN: последовательность_операторовN; break; default последовательность_операторов; >

  • выражение – некоторое выражение целочисленного ( int ) или символьного типа ( char );
  • константа1 , константа2 , …, константаN – константные значения, с которыми сравнивается значение выражения. Константные значения должны быть целочисленного или символьного типа;
  • последовательность_операторов1 , последовательность_операторов2 , …, последовательность_операторовN – соответствующая последовательность операторов (инструкций), которые связаны с соответствующим условием;
  • последовательность_операторов – последовательность операторов, которая выполняется в случае, если не найдено ни одно совпадение значения выражения со значением констант.

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

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

Операция break прерывает (заканчивает) выполнение кода, который определен инструкцией switch .

Операции, которые размещены после ключевого слова default , выполняются в том случае, если ни одна из case-констант не совпадает с результатом вычисления switch -выражения.

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

3. Примеры использования оператора выбора switch

Пример 1. Даны значения n = 1..7, что есть номером дня недели. По значению n определить, выходной этот день или рабочий. Результат записать в переменную fDayOff типа bool .

Фрагмент кода, который решает данную задачу.

int day; bool fDayOff; day = 3; switch (day) < case 1: fDayOff = false; break; case 2: fDayOff = false; break; case 3: fDayOff = false; break; case 4: fDayOff = false; break; case 5: fDayOff = false; break; case 6: fDayOff = true; break; case 7: fDayOff = true; break; >

Другой, более компактный вариант решения данной задачи.

int day; bool fDayOff; day = 7; switch (day) < case 1: case 2: case 3: case 4: case 5: fDayOff = false; break; case 6: case 7: fDayOff = true; break; >

Еще один вариант решения данной задачи

int day; bool fDayOff; day = 7; switch (day) < case 6: case 7: fDayOff = true; break; default: fDayOff = false; >

Пример 2. Дано целое число n = 1..3, которое есть номером функции. По значению переменной n вычислить значение соответствующей функции:

1) -2×2-4; 2) 5x+2; 3) 15-3x.

Фрагмент кода, который решает данную задачу с помощью сокращенной формы оператора switch .

int n; float f, x; n = 3; x = 3; switch (n) < case 1: f = -2*x*x-4; break; case 2: f = 5*x+2; break; case 3: f = 15-3*x; break; >

4. Особенности использования операции break в операторе switch

В операторе switch операция break не является обязательной.

Если операция break присутствует, то происходит выход из оператору switch и выполнение следующего за ним оператора. Если операция break в case -ветви отсутствует, тогда выполняются все операторы, которые связаны с данной case -ветвью, а также все операторы, которые следуют сразу после нее до тех пор, пока не встретится другая инструкция break или не будет достигнут конец switch -оператора.

5. Вложенные инструкции switch . Общая форма описания

Оператор switch может иметь разные типы вложения. В этом случае вложенный оператор (нижнего уровня) switch используется как часть case -последовательности внешнего (верхнего уровня) оператора switch .

Общая форма описания вложенной инструкции switch :

switch (выражение) < case константа1: последовательность_операторов1; break; case константа2: последовательность_операторов2; break; . case константаK; switch (выражение) < . >break; . case константаN: последовательность_операторовN; break; default последовательность_операторов; >

Связанные темы

  • C#. Оператор выбора switch
  • C++. Оператор условного перехода if
  • C++. Операция sizeof . Операция ? :

Источник: www.bestprog.net

switch statement

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

Syntax

attr(optional) switch ( init-statement(optional)condition ) statement
  • выражение утверждение (которое может быть null statement » ; «)
  • простое объявление , обычно объявление переменной с инициализатором, но оно может объявлять произвольно много переменных или структурированных привязок (начиная с C++17)
attr(optional) case constant-expression : statement (1)
attr(optional) default : statement (2)
constant-expression константное выражение того же типа, что и тип условия после преобразований и интегральных повышений

Explanation

Тело оператора switch может иметь произвольное количество case: меток, если значения всех константных выражений уникальны (после преобразований/продвижений). Может присутствовать не более одной метки default: (хотя вложенные операторы switch могут использовать свои собственные метки default: или иметь case: метки, константы которых идентичны тем, которые используются во включенном переключателе).

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

Если условие оценивается как значение, которое не соответствует ни одному из case: label, и присутствует default: label, управление передается в оператор, помеченный default: label.

Если условие оценивается как значение, которое не соответствует ни одной из меток case: ,а метка по default: отсутствует, то ни один из операторов в теле переключателя не выполняется.

Оператор break , когда встречается в операторе, выходит из оператора switch:

switch (1) < case 1: cout ‘1’; // prints «1», case 2: cout ‘2’; // then prints «2» >
switch (1) < case 1: cout ‘1’; // выводит «1» break; // и выходим из переключателя case 2: cout ‘2’; break; >

Компиляторы могут выдавать предупреждения о провале (достижение следующей метки варианта без разрыва), если только атрибут [[fallthrough]] не появляется непосредственно перед меткой варианта, чтобы указать, что отказ является преднамеренным.

Если используется инит-выражение,то оператор переключения эквивалентен.

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

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

switch (1) < case 1: int x = 0; // initialization std::cout ‘n’; break; default: //ошибка компиляции:переход на значение по умолчанию: //войдет в область видимости ‘x’ без его инициализации std::cout «defaultn»; break; >
switch (1) < case 1: < int x = 0; std::cout ‘n’; break; > // область видимости ‘x’ здесь заканчивается default: std::cout «defaultn»; // Нет ошибок break; >

Keywords

Example

Следующий код показывает несколько случаев использования switch statement.

#include int main() < const int i = 2; switch (i) < case 1: std::cout «1»; case 2: // выполнение начинается с этой метки case std::cout «2»; case 3: std::cout «3»; [[fallthrough]]; //Атрибут C++17 для отключения предупреждения при падении case 5: std::cout «45»; break; // выполнение последующих операторов прекращается case 6: std::cout «6»; > std::cout ‘n’; switch (i) < case 4: std::cout «a»; default: std::cout «d»; //нет применимых постоянных выражений // поэтому выполняется значение по умолчанию > std::cout ‘n’; switch (i) < case 4: std::cout «a»; // ничего не выполняется > // когда в операторе switch используются перечисления, многие компиляторы // выдает предупреждения, если один из счетчиков не обрабатывается enum color < RED, GREEN, BLUE >; switch (RED) < case RED: std::cout «redn»; break; case GREEN: std::cout «greenn»; break; case BLUE: std::cout «bluen»; break; > // синтаксис оператора инициализации C ++ 17 может быть полезен, когда есть // неявное преобразование в целочисленный или перечисляемый тип struct Device < enum State < SLEEP, READY, BAD >; auto state() const < return m_state; > /*. */ private: State m_state<>; >; switch (auto dev = Device<>; dev.state()) < case Device::SLEEP: /*. */ break; case Device::READY: /*. */ break; case Device::BAD: /*. */ break; > // патологические примеры // оператор не обязательно должен быть составным оператором switch (0) std::cout «this does nothingn»; // метки также не требуют составного оператора switch (int n = 1) < case 0: case 1: std::cout << n ‘n’; > >
2345 d red 1

Defect reports

Следующие отчеты о дефектах,изменяющих поведение,были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Поведение в опубликованном виде Correct behavior
CWG 1767 C++98 условия типов,которые не подлежат
интегральное продвижение не может быть продвинуто
не продвигать
состояния этих типов

See also

Документация C для switch
  • Разворачивание циклов с помощью устройства Даффа
  • Устройство Даффа может быть использовано для реализации короутинов в C/C++
C++

String literal

Каждый s-char (первоначально из несырьевых строковых литералов)и r-char (с C++11)инициализирует соответствующий объект элемента(ов).

Структурированное обязательное заявление (начиная с C++17)
Привязывает указанные имена к подобъектам или элементам инициализатора.
Шаблонное вычитание аргумента
Чтобы инстанцировать шаблон функции,каждый аргумент должен быть известен,но не определен.
Other contexts

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

Источник: runebook.dev

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru