Перейти к содержимому

Case c что это

  • автор:

Case c что это

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

switch(выражение)

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

Стоит отметить, что сравниваемое выражение в switch должно представлять один из целочисленных или символьных типов или перечисление (рассматриваются далее).

В конце конструкции switch может стоять блок default . Он необязателен и выполняется в том случае, если значение после switch не соответствует ни одному из операторов case. Например:

#include int main() < int x ; switch(x) < case 1: std::cout >

Чтобы избежать выполнения последующих блоков case/default, в конце каждого блока ставится оператор break . То есть в данном случае будет выполняться оператор

case 2: std::cout 

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

x = 2

Стоит отметить важность использования оператора break . Если мы его не укажем в блоке case , то после этого блока выполнение перейдет к следующему блоку case. Например, уберем из предыдущего примера все операторы break:

#include int main() < int x ; switch(x) < case 1: std::cout >

В этом случае опять же будет выполняться оператор case 2: , так как переменная x=2. Однако так как этот блок case не завершается оператором break, то после его завершения будет выполняться набор инструкций после case 3: даже несмотря на то, что переменная x по прежнему равна 2. В итоге мы получим следующий консольный вывод:

x = 2 x = 3 x is undefined
Совмещение условий

Можно определять для нескольких меток case один набор инструкций:

#include int main() < int x ; switch(x) < case 1: case 2: std::cout >
Переменные в блоках case

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

#include int main() < int x ; switch(x) < case 1: < int a; std::cout case 2: < int b; std::cout default: int c; std::cout >
Блок switch с инициализацией переменной

Иногда в конструкции switch для различных промежуточных вычислений необходимо определить переменную. Для этой цели начиная со стандарта C++17 язык С++ поддерживает особую форму конструкции switch :

switch(инициализация; выражение) < // . >

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

#include int main() < char op = '+'; int n = 10; switch(int k; op) < case '+': std::cout >

В данном случае в конструкции switch определяется переменная k , которая доступна только в рамках этой конструкции switch . В качестве выражения используется значение переменной op , которая представляет знак операции. И в зависимости от этого значения, выполняем определенную операцию с переменными n и k.

switch оператор (C++)

Позволяет выбирать между несколькими разделами кода в зависимости от значения целочисленного выражения.

Синтаксис

selection-statement :
switch ( init-statement opt C++17 condition ) statement

labeled-statement :
case constant-expression : statement
default : statement

Замечания

Оператор switch передает управление одному из labeled-statement в своем теле в зависимости от значения condition .

Должен condition иметь целочисленный тип или быть типом класса, который имеет однозначное преобразование в целочисленный тип. Целочисленное продвижение происходит, как описано в преобразованиях уровня "Стандартный".

Текст switch инструкции case состоит из ряда меток и optметки ional default . Это labeled-statement одна из этих меток и приведенные ниже инструкции. Помеченные операторы не являются синтаксическими требованиями, но switch инструкция бессмысленна без них. Не два constant-expression значения в case инструкциях могут иметь одно и то же значение. default Метка может отображаться только один раз. Оператор default часто помещается в конец, но он может отображаться в любом месте текста switch оператора. Метка case или default может располагаться только внутри оператора switch .

Каждая constant-expression метка преобразуется в case постоянное значение, которое совпадает с типом condition . Затем он сравнивается с condition равенством. Элемент управления передается первому оператору после case constant-expression значения, соответствующего condition значению. Поведение, полученное в результате, показано в следующей таблице.

switch поведение оператора

Condition Действие
Преобразованное значение соответствует значению выражения управления с повышенным уровнем. Управление передается оператору, следующему за этой меткой.
Ни одна из констант не соответствует константам в case метках; default метка присутствует. Элемент управления передается default в метку.
Ни одна из констант не соответствует константам в case метках; метка отсутствует default . Элемент управления передается инструкции после инструкции switch .

Если найдено соответствующее выражение, выполнение может продолжаться через более поздние case или default метки. Оператор break используется для остановки выполнения и передачи элемента управления в инструкцию после инструкции switch . break Без инструкции выполняется каждая инструкция из соответствующей case метки до конца switch , включая оператор default . Например:

// switch_statement1.cpp #include int main() < const char *buffer = "Any character stream"; int uppercase_A, lowercase_a, other; char c; uppercase_A = lowercase_a = other = 0; while ( c = *buffer++ ) // Walks buffer until NULL < switch ( c ) < case 'A': uppercase_A++; break; case 'a': lowercase_a++; break; default: other++; >> printf_s( "\nUppercase A: %d\nLowercase a: %d\nTotal: %d\n", uppercase_A, lowercase_a, (uppercase_A + lowercase_a + other) ); > 

В приведенном выше примере увеличивается, uppercase_A если является верхним 'A' case. c Оператор break после uppercase_A++ завершения выполнения текста инструкции switch и элемента управления передается в while цикл. Без инструкции break выполнение будет "переходить" к следующей помеченной инструкции, чтобы lowercase_a other инкрементироваться. Аналогичное назначение выполняется заявлением break для case 'a' . Если c значение меньшеcase 'a' , увеличивается, lowercase_a а оператор break завершает текст инструкции switch . Если c это не или 'a' 'A' default оператор выполняется.

Visual Studio 2017 и более поздних версий (доступно в /std:c++17 режиме и более поздних версиях): [[fallthrough]] атрибут указан в стандарте C++17. Его можно использовать в инструкции switch . Это указание компилятору или любому, кто считывает код, что падающее поведение намеренно. Компилятор Microsoft C++ в настоящее время не предупреждает о поведении резервного руководства, поэтому этот атрибут не влияет на поведение компилятора. В примере атрибут применяется к пустой инструкции в нетерминированной инструкции с метками. Другими словами, необходима точка с запятой.

int main() < int n = 5; switch (n) < case 1: a(); break; case 2: b(); d(); [[fallthrough]]; // I meant to do this! case 3: c(); break; default: d(); break; >return 0; > 

Visual Studio 2017 версии 15.3 и более поздних версий (доступных в /std:c++17 режиме и более поздних версиях): инструкция switch может иметь init-statement предложение, которое заканчивается точкой с запятой. Он вводит и инициализирует переменную, область которой ограничен блоком инструкции switch :

 switch (Gadget gadget(args); auto s = gadget.get_status()) < case status::good: gadget.zip(); break; case status::bad: throw BadGadget(); >; 

Внутренний блок инструкции switch может содержать определения с инициализаторами до тех пор, пока они доступны, то есть не обходятся всеми возможными путями выполнения. Имена, добавленные с помощью этих объявлений, имеют локальную область видимости. Например:

// switch_statement2.cpp // C2360 expected #include using namespace std; int main(int argc, char *argv[]) < switch( tolower( *argv[1] ) ) < // Error. Unreachable declaration. char szChEntered[] = "Character entered was: "; case 'a' : < // Declaration of szChEntered OK. Local scope. char szChEntered[] = "Character entered was: "; cout break; case 'b' : // Value of szChEntered undefined. cout > 

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

Поведение в системах Майкрософт

Microsoft C++ не ограничивает количество значений case в инструкции switch . Это число ограничивается только объемом доступной памяти.

switch-case в C++: что это и как с ней работать

обложка статьи

Всем привет! В C++ благодаря условным операторам if и else можем выбирать по какому пути идти. Но если нам понадобится проверить несколько выражений, использовать оператор if будет не разумно из-за того что в C++ есть - switch.

Что такое switch

Это множественный условный оператор. Он работает также как несколько условий if, но может проверять лишь одну переменную в своих условиях. Если одно условие является правильным происходит выход.

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

switch (переменная)  >

Для проверки условия нужно использовать конструкцию case:

switch (x)  case  проверяемое значение >: cout  <""; // ваш var a = 5; // блок кода break; >

После слова case используются : (двоеточие), а в самом ее конце должен присутствовать оператор break .

Чтобы проще ориентироваться в коде можно применять скобки.

case 5: // что то выполняется break; >

Что такое default

Он работает лишь когда все case являются не верными. В конструкции использовать не обязательно.

int x = 9; switch (x)  case 5: cout  <"Значение равно 5"; break; case 6: cout  <"Значение равно 6"; break; case 0: cout  <"Значение равно zero"; break; default: cout  <"Значение не равно 5, 6 и даже 0"; >
Значение не равно 5, 6 и даже zero Process returned 0 (0x0) execution time : 0.010 s Press any key to continue.

Если ни одно case и default не правильны, то программа выйдет из switch и продолжит работать дальше.

Пример использования switch

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

 int str; int first, second; cout  "Введите первое число: "; cin >> first; cout  "Введите второе число: "; cin >> second; cout  "Укажите какую операцию использовать: "cin >> str; switch (str)  case 5: cout  "Сумма: "  first + second; break; case 8: cout  "Вычитание: "  first - second; break; case 9: cout  "Умножение: "  first * second; break; case 7: cout  "Деление: "  first / second; break; default: cout  "Что-то пошло не так. Повторите попытку"; >
  • В строках 10, 13, 16, 19: применяется проверка значений str .
  • В строке 22: если пользователь ошибся с числом, то программа его оповестит с помощью оператора default .

Вот пример успешного выполнения программы:

Введите первое число: 5 Введите первое число: 7 Укажите какую операцию использовать: 9 Умножение: 35 Process returned 0 (0x0) execution time : 0.010 s Press any key to continue.

Вот и все! Надеемся этот урок был для вас полезен. Удачи!

Читайте также

Цикл do while в C++

В очередном уроке по C++ мы пройдем цикл do while. В этом уроке вы узнаете как его просто реализовать и закрепим пройденные знания на примере. Удачи!

Область видимости переменных в C++

В данном уроке мы познакомим вас с областью видимости C++. Вы узнаете, что такое локальные переменные, глобальные переменные и как правильно ими пользоваться.

Мы рассмотрим создание программы, ее структуру, а также главные правила синтаксиса языка C++.
Логические выражения в C++

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *