Оператор switch в C++
В этом руководстве мы узнаем об операторе switch и его работе в программировании на C++ с помощью некоторых примеров. Оператор switch позволяет нам выполнять блок кода из множества альтернатив.
Синтаксис оператора в си++:
switch (expression) < case constant1: // code to be executed if // expression is equal to constant1; break; case constant2: // code to be executed if // expression is equal to constant2; break; . . . default: // code to be executed if // expression doesn’t match any constant >
Как работает оператор switch в C++?
Выражение оценивается один раз и сравнивается со значениями каждой метки case:
- Если есть совпадение, выполняется код после соответствующей метки. Например, если значение переменной равно constant2, код после case constant2: выполняется до тех пор, пока не встретится оператор break.
- Если совпадений нет, выполняется код после default:.
Примечание: мы можем сделать то же самое с if … else..if, однако синтаксис оператора switch проще и его гораздо легче читать и писать.
Свитч: что это такое?
Блок-схема
Пример: создание калькулятора
// Program to build a simple calculator using switch Statement #include using namespace std; int main() < char oper; float num1, num2; cout > oper; cout > num1 >> num2; switch (oper) < case ‘+’: cout return 0; >
Enter an operator (+, -, *, /): + Enter two numbers: 2.3 4.5 2.3 + 4.5 = 6.8
Enter an operator (+, -, *, /): — Enter two numbers: 2.3 4.5 2.3 — 4.5 = -2.2
Enter an operator (+, -, *, /): * Enter two numbers: 2.3 4.5 2.3 * 4.5 = 10.35
Enter an operator (+, -, *, /): / Enter two numbers: 2.3 4.5 2.3 / 4.5 = 0.511111
Enter an operator (+, -, *, /): ? Enter two numbers: 2.3 4.5 Error! The operator is not correct.
В приведенной выше программе мы используем оператор switch … case для выполнения сложения, вычитания, умножения и деления.
Программа для проверки, является ли символ гласным или согласным в C++
Как работает эта программа?
- Сначала мы предлагаем пользователю ввести желаемого оператора. Затем этот ввод сохраняется в переменной char с именем oper .
- Затем предлагаем пользователю ввести два числа, которые хранятся в num1 и num2.
- Затем оператор switch используется для проверки оператора, введенного пользователем:
- Если пользователь вводит +, числа производятся сложением.
- Если пользователь вводит -, выполняется вычитание чисел.
- Если пользователь вводит *, числа производятся умножением.
- Если пользователь вводит /, выполняется деление по числам.
- Если пользователь вводит любой другой символ, печатается код по умолчанию.
Обратите внимание, что оператор break используется внутри каждого блока case. Если оператор break не используется, выполняются все варианты после правильного.
Switch. Что это. Пример. Синтаксис. Оператор множественного выбора. Урок #13.
- Цикл for в C++
- Преобразование типов в C++
- Оператор if … else в C++
Источник: calmsen.ru
Оператор множественного выбора switch
Итак мы рассмотрели оператор с одиночным выбором if и оператор с двойным выбором if else , но в С++ еще имеется оператор множественного выбора switch , который мы сейчас детально рассмотрим.
// форма записи оператора множественного выбора switch switch (/*переменная или выражение*/) < case /*константное выражение1/*: < /*группа операторов*/; break; >case /*константное выражение2*/: < /*группа операторов*/; break; >//. . . default: < /*группа операторов*/; >>
На начальном этапе анализируется выражение или переменная. После чего осуществляется переход к той ветви программы, для которой значение переменной или выражения совпадает с указанным константным выражением. Далее выполняется оператор или группа операторов пока не встретится зарезервированное слово break или закрывающая фигурная скобочка. Если значение переменной или выражения не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default . После чего выполняется оператор или группа операторов данной ветви. Сейчас рассмотрим задачу с использованием оператора выбора switch .
Условие задачи: написать программу, которая складывает, вычитает, умножает, делит два числа введенных с клавиатуры. Разработать пользовательский интерфейс.
// switch.cpp: определяет точку входа для консольного приложения. #include «stdafx.h» #include using namespace std; int main(int argc, char* argv[]) < int count; // переменная для выбора в switch double a,b; // переменные для хранения операндов cout > a; cout > b; cout > count; switch (count) // начало оператора switch < case 1: // если count = 1 < cout case 2: // если count = 2 < cout case 3: // если count = 3 < cout case 4: // если count = 4 < cout default: // если count равно любому другому значению cout system(«pause»); return 0; >
В 9-й строке мы объявили переменную count целочисленного типа. Именно значение данной переменной программа будет сравнивать со значением константного выражения. В строке 10 объявлены две переменные вещественного типа данных, для хранения введённых чисел. Почему вещественного, объясню позже. С 17 по 41 строки записан условный оператор множественного выбора switch . На начальном этапе анализируется переменная count . Анализируется таким образом:
если переменная count равна единице, значит, выполняется блок операторов с 20-й по 23-ю строки;
если переменная count равна двойке, значит, выполняется блок операторов с 25-й по 28-ю строки;
если переменная count равна тройке, значит, выполняется блок операторов с 30-й по 33-ю строки;
если переменная count равна четырем, значит, выполняется блок операторов с 35-й по 38-ю строки;
Если же значение переменной count не совпадает ни с одним константным выражением, то передается управление ветви программы содержащей зарезервированное слово default . То есть будет выполнена следующая строка
cout
Оператор switch может содержать, а может и не содержать зарезервированное слово default . Если значение переменной не совпадет ни с одним константным выражением и не будет default , то программное управление в этом случае просто перешло бы к первому оператору после switch . В строках 19, 24, 29, 34 записаны константные выражения, с которыми программа сравнивает значение переменной count .
В строках 22, 27, 32, 37, записан оператор break. Возникает вопрос: «Зачем он нужен?» Допустим, пользователь ввел 2, то есть переменная count инициализировалась двойкой. Начинает работать условный оператор множественного выбора switch . То есть выполняется поиск двойки в константных выражениях.
Сначала проверяется строка 19, мы видим, что в строке 19 константное выражение равно единице, а нам нужна двойка. Проверяем дальше. А дальше по порядку строка 24. Мы видим, что в строке 24 константное выражение равно двойке, то, что нужно. Переменная count равна константному выражению, выполняется блок операторов с 25 по 28 строки.
И вот в 27-й строке записан оператор break , который заставляет программу перейти к первому оператору после оператора switch . В данном случае управление передается строке 42. А нужен этот переход только для того, чтобы не выполнялись заведомо ненужные действия. Если убрать оператор break , то программа будет дальше сравнивать значение переменной с константными выражениями, пока они все не закончатся и потом все равно передаст управление строке 42. Результат работы программы показан ниже (см. Рисунок 1).
Рисунок 1 — Оператор множественного выбора в С++
Вернемся к строке 10, там объявляются две переменные типа double . Наверное, возникает вопрос, «Почему вещественного типа, а не целочисленного?». Отвечаю: «Потому, что одно из действий, которые может выполнять программа является деление, а при делении результат имеет вещественный тип данных. Компилятор С++ при делении чисел обращает внимание на их типы данных.
Если мы просто делим числа на калькуляторе, например 4/5=0.8 Компилятор С++ нам выдаст результат при таком делении 0. Так как оба числа являются целочисленными, значит, результат тоже будет целочисленный, то есть целая часть от обычного деления, а в нашем случае целая часть при таком делении – это 0, соответственно часть информации теряется, или как еще говорят, отсекается (восемь десятых, в нашем случае, отсекается). А если делимое и делитель поменять местами, на калькуляторе получим: 5/4=1.25; компилятор С++ покажет несколько иной результат, а именно 5/4=1 (0.25 отсекается). Такое явление в С++ называется неявным приведением типа.» Вещественный тип данных используется для более точного представления чисел, чем целочисленный (то есть отображает дробную часть).
В С++ существуют два вещественных типа данных:
1) double – вещественный тип данных двойной точности, а значит занимает вдвое больше памяти, чем тип float
2) float – вещественный тип данных одинарной точности
Источник: cppstudio.com
Свитч программа что это
Как и при каком значении должна вести себя программа, определяется программистом с помощью так называемой case-константы .
- При сравнении на символ, нужно символ заключать в одинарные кавычки, иначе сравнение будет с числом
Сравнение на число
Сравнение на символ
case 1 : Поведение1; break;
case 2 : Поведение2; break;
case 3 : Поведение3; break;
case ‘ 1 ‘: Поведение1; break;
case ‘ 2 ‘: Поведение2; break;
case ‘ 3 ‘: Поведение3; break;
using namespace std ;
case 1 : cout < < «povedenie 1» < < endl ; //Забытый break
case 2 : cout < < «povedenie 2» < < endl ; break ; //Выполнится два поведения
case 3 : cout < < «povedenie 3» < < endl ;
default : cerr < < «errorn» ;
//Поставьте забытый break, чтобы уловить различие
Блок, определяющий все поведения для программы, заворачивается в фигурные скобки, хотя в случае единственного поведения, фигурные скобки можно не писать:
//Суперминимальная программа со switch
//clang switch Листинг #4
using std : : cout ;
switch ( a ) case 1 : cout < < «Hellon» ;
На самом деле эта суперминимальная программа никакого премущества перед if не имеет, но зато вы видите, что сиё дозволено в C++ . Нестественно и неправильно использовать switch для определения одного поведения программы, потому что этот switch является оператором множественного выбора, он как множественный if , только при наличии множества работает быстрее, и глазу приятнее. А если вы смотрели тему об if или знаете о проблеме висячего else , то прекрасно должны понимать, что фигурные скобки лучше всегда писать, чем не писать.
- switch анализирует входящую переменную на равенство с указываемыми значениями
После определения нами анализируемой переменной сама анализируемая переменная отдаётся в switch вовнутрь круглых скобок, а после этого всё, что имеет отношение к анализу switch , оборачивается фигурными скобками. Непосредственно сами поведения в фигурные скобки можно не оборачивать.
Источник: ci-plus-plus-snachala.ru
Оператор Switch
Оператор switch принимает в качестве аргумента число, и в зависимости от его значения выполняет те или иные команды.
switch () < case : [case : ] [default: ] >
Если значение переменной не соответствует ни одному case, то выполняется default ветвь. Она может отсутствовать, тогда вообще ничего не выполняется.
В примере выше каждая ветвь оканчивается оператором break. Это важно. Когда компьютер видит оператор break, он выходит из оператора switch. Если бы он отсутствовал, то программа «провалилась» бы дальше, и стала выполнять следующие ветви.
#include #include int main() < unsigned day; printf(«Enter day «); scanf(«%d», if (day >7) < day = day % 7; >switch (day) < case 0: printf(«Sunday»); case 1: printf(«Monday»); case 2: printf(«Tuesday»); case 3: printf(«Wednesday»); case 4: printf(«Thursday»); case 5: printf(«Friday»); default: printf(«Saturday»); >getch(); >
Введите значение, например 3, и вы увидите, что программа выведет
WednesdayThursdayFridaySaturday то есть все ветви, после найденной.
Операторы каждой из ветвей могут быть обрамлены фигурными скобками (и так даже лучше). Тогда каждая из ветвей будет отдельным блоком, в котором можно определять свои переменные. Пример программы, которая запрашивает у пользователя число, оператор и второе число и выполняет действие.
#include #include #include int main() < float a, b, c; char op; scanf(«%f %c %f», op, switch (op) < case ‘+’: < c = a + b; break; >case ‘-‘: < c = a — b; break; >case ‘/’: < if (b != 0.0) < c = a / b; >else < printf(«Error: divide by zero»); getch(); exit(1); >break; > case ‘*’: < c = a * b; break; >default: printf(«No operation defined»); getch(); exit(1); > printf(«%.6f», c); getch(); >
Если ввести
1 + 2
то будет выведен результат операции 1 + 2 = 3
Хочу обратить внимание, что литеры типа ‘+’ и т.п. воспринимаются в качестве чисел, поэтому их можно использовать в операторе switch. В этой программе использовалась функция exit из библиотеки stdlib. Функция останавливает работу программы и возвращает результат её работы. Если возвращается истина (ненулевое значение), то это значит, что программа была выполнена с ошибкой.
Ветвь default может располагаться в любом месте, не обязательно в конце. Этот код также будет нормально работать
switch (day)
default здесь также нуждается в операторе break, как и другие ветви, иначе произойдёт сваливание вниз. Несмотря на то, что так можно писать, это плохой стиль программирования. Ветвь default логически располагается в конце, когда других вариантов больше нет.
Возможные значения аргумента оператора switch могут располагаться в любом порядке, но должны быть константными значеними. Это значит, что следующий код не заработает
#include #include #include int main() < //Это, конечно, константа, но не может быть использована как //значение для оператора switch const int monday = 0; unsigned day; printf(«Enter day «); scanf(«%d», if (day >7) < day = day % 7; >switch (day) < case monday: printf(«Sunday»); break; case 1: printf(«Monday»); break; case 2: printf(«Tuesday»); break; case 3: printf(«Wednesday»); break; case 4: printf(«Thursday»); break; default: printf(«Saturday»); break; case 5: printf(«Friday»); break; >getch(); >
Всё ещё не понятно? – пиши вопросы на ящик
Источник: learnc.info