Зачем нужен switch case
Перейти к содержимому

Зачем нужен switch case

  • автор:

Конструкция switch — case в C++

Сегодня мы научимся пользоваться этой полезной конструкцией языка c++.

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

В этой статье мы узнаем как удобно оформлять подобные конструкции с помощью switch case, а так же узнаем немного о enum типах, которые хорошо подходят для работы со switch case.

Конструкция switch-case — это удобная замена длинной if-else конструкции, которая сравнивает переменную с несколькими константными значениями, например int или char.

Синтаксис

switch ( ) < case значение1: Выполнить если == значение1 break; case значение2: Выполнить если == значение2 break; . default: выполнить, если ни один вариант не подошел break; >

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

int a=1; switch(a) < case 1: a++; case 2: a++; case 3: a++; >cout

Данная программа выведет a = 4.

Значения для сравнения, описанные после case могут быть только константами, поэтому следующий вариант использования switch-case — неверен:

int a = 10; int b = 10; int c = 20; switch ( a ) < case b: // Code break; case c: // Code break; default: // Code break; >

При попытке скомпилировать данную программу, вы получите подобное сообщение:

test.cpp:9: error: 'b' cannot appear in a constant-expression

Блок default — необязателен, но он полезен для обработки исключительных ситуации.

Следующая программа демонстрирует один из возможных вариантов использования switch-case:

#include using namespace std; void playgame() < cout void loadgame() < cout void playmultiplayer() < cout int main() < int input; cout> input; switch ( input ) < case 1: playgame(); break; case 2: loadgame(); break; case 3: playmultiplayer(); break; case 4: coutcin.get(); >

Эта программа показывает простой способ обработки вводимых пользователем данных.

Минус данной программы в том, что она дает только одну попытку, без права на ошибку �� . Это легко исправить, заключив весь блок switch-case в цикл. Но может возникнуть вопрос: внутри switch-case есть break, не прервет ли он выполнение цикла? Нет, break прервет только выполнение блока switch.

Сравнение switch-case с if-else

Если у вас возникают проблемы с пониманием того, как работает switch-case, посмотрите на следующую if-else конструкцию, она работает точно так же, как и switch

if ( 1 == input ) < playgame(); >else if ( 2 == input ) < loadgame(); >else if ( 3 == input ) < playmultiplayer(); >else if ( 4 == input ) < cout else

Если мы можем сделать то же самое с помощью if-else, зачем вообще нужен switch? Главное преимущество этой конструкции в том, что нам понятно, как работает программа: единственная переменная контролирует поведение программы. В случае с if-else, придется внимательно читать каждое условие.

Создаем собственные типы с помощью enumeration

Иногда при написании программ могут понадобится переменные, которые могут принимать только строго определенные значения, которые известны вам заранее. Например, вы можете задать ограниченный набор цветов, которые пользователь может выбрать. Очень удобно иметь сразу и набор доступных констант и тип переменной, который связан с этим набором. Более того, подобные переменные хорошо подходят для использования в switch-case, так как вы знаете все возможные значения заранее.

Тип enum (сокращение от «enumerated type«, перечисляемые типы) содержит перечисление различных значений, например цветов радуги:

enum RainbowColor < RC_RED, RC_ORANGE, RC_YELLOW, RC_GREEN, RC_BLUE, RC_INDIGO, RC_VIOLET >;

Несколько важных моментов:

  • Для объявление перечисляемого типа используйте ключевое слово enum.
  • Имя нового типа вы задаете сами, например RainbowColor.
  • Все возможные значения для данного типа перечислены в фигурных скобках.
  • После объявления перечисления необходима точка с запятой.

Теперь вы можете объявлять переменные с типом RainbowColor:

RainbowColor chosen_color = RC_RED;

И, как уже говорилось, эти переменные хорошо подходят для использования в switch:

switch (chosen_color) < case RC_RED: /* paint screen red */ case RC_ORANGE: /* paint screen orange */ case RC_YELLOW: /* paint screen yellow */ case RC_GREEN: /* paint screen green */ case RC_BLUE: /* paint screen blue */ case RC_INDIGO: /* paint screen indigo */ case RC_VIOLET: /* paint screen violet */ default: /* обработка исключений */ >

Так как мы используем перечисления, мы можем быть уверенными, что рассмотрели все возможные значения переменной. Значения констант в перечислении — это простой int, по умолчанию каждое следующее значение больше предыдущего на 1. Для первого — 0, для второго — 1 и т.д. В нашем случае: RC_RED = 0 и RC_ORANGE = 1.

Вы также можете задать собственные значения:

enum RainbowColor < RC_RED = 1, RC_ORANGE = 3, RC_YELLOW = 5, RC_GREEN = 7, RC_BLUE = 9, RC_INDIGO = 11, RC_VIOLET = 13 >;

Преимущество использования перечисляемых типов в том, что вы можете задать имя значениям, которые иначе пришлось бы хард-кодить. Например, если вы пишете игру крестики-нолики, вам нужен способ представления крестиков и ноликов на доске. Это может быть 0 для пустой клетки, 1 для нолика и 2 для крестика. Значит, наверняка придется использовать подобный код:

if ( board_position == 1 ) < /* do something */ >

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

enum TicTacToeSquare < TTTS_BLANK, TTTS_O, TTTS_X >; if ( board_position == TTTS_O ) < /* some code */ >

Теперь все гораздо понятнее �� .

На этом всё! Подписывайтесь и не пропустите новые уроки! ��

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 не будет опубликован. Обязательные поля помечены *