В какой-то момент времени у начинающего программиста в коде начинает появляться слишком много условий. Например, захотелось вам запрограммировать каждый символ клавиаутуры на определённое поведение, вы пишете код, отдалённо напоминающий листинг #1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
//clang switch Листинг #1 #include <iostream> using namespace std; int main () { char ch; cout << "input ch:\t"; cin >> ch; if (ch == 'A') { cout << "one" << endl; } else if (ch == 'B') { cout << "two" << endl; } else if (ch == 'C') { cout << "three" << endl; } else if (ch == 'D') { cout << "for" << endl; } else if (ch == 'E') { cout << "five" << endl; } else { cerr << "error\n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
//clang switch Листинг #2 #include <iostream> using namespace std; int main () { char ch; cout << "input ch:\t"; cin >> ch; switch (ch){ case 'A': cout << "one" << endl; break; case 'B': cout << "two" << endl; break; case 'C': cout << "three" << endl; break; case 'D': cout << "for" << endl; break; case 'E': cout << "five" << endl; break; default: cerr << "error\n"; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Borland C++ 3.1 switch Листинг #3 #include <iostream.h> #include <conio.h> int main() { clrscr(); //очистка экрана int a = 1; //какая-то переменная switch (a) //Проверка значения переменной на равенство: { case 1: break; //с единицей } } |
показать дополнительные разъяснения
Как и при каком значении должна вести себя программа, определяется программистом с помощью так называемой case-константы.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> using namespace std; int main(){ int a = 1; switch (a) { case 1: cout << "povedenie 1" << endl; //Забытый break case 2: cout << "povedenie 2" << endl; break; //Выполнится два поведения case 3: cout << "povedenie 3" << endl; default: cerr << "error\n"; } } //Поставьте забытый break, чтобы уловить различие |
1 2 3 4 5 6 7 8 9 10 11 |
//Суперминимальная программа со switch //clang switch Листинг #4 #include <iostream> using std::cout; int main() { int a = 1; switch (a) case 1: cout << "Hello\n"; } |
После определения нами анализируемой переменной сама анализируемая переменная отдаётся в switch вовнутрь круглых скобок, а после этого всё, что имеет отношение к анализу switch, оборачивается фигурными скобками. Непосредственно сами поведения в фигурные скобки можно не оборачивать.
1 2 3 4 5 6 |
//Псевдокод #1 int a; switch (a) { Тут наши варианты работы программы } |
1 2 3 4 5 6 7 8 |
//Псевдокод #2 int a; switch (a) { case Первый вариант case Второй вариант case Третий вариант } |
1 2 3 4 5 6 7 8 9 10 11 |
//Псевдокод #3 int a; a = что-то; //где-то a стало равным чему-либо //Проверка a на равенства: равно ли а единице?, равно ли двойке?, равно ли тройке? switch (a) { case 1: Первый вариант case 2: Второй вариант case 3: Третий вариант } |
Неразумно использовать switch для неравенств. Т. е. при проверках на вхождения в диапазоны следует использовать if или if…else.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
//Borland C++ 3.1 switch Листинг #5 #include <iostream.h> #include <conio.h> int main() { clrscr(); int a; cout << "wwedi a: "; cin >> a; //В зависимости от введенного нами значения a //программа выведет нам на экран один из трех вариантов switch (a) //Указали, что анализировать нужно значения а { case 1: cout << "Bil wibran perviy wariant"; break; case 2: cout << "Bil wibran wtoroy wariant"; break; case 3: cout << "Bil wibran tretiy wariant"; break; } cin.get(); //Ожидание нажатия клавиши Enter } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
//Borland C++ 3.1 switch Листинг #6 #include <iostream.h> #include <conio.h> int main() { clrscr(); int a; cout << "wwedi a: "; cin >> a; //В зависимости от введенного нами значения a //программа выведет нам на экран один из трех вариантов switch (a) //Указали, что анализировать нужно значения а { case 1: cout << "Bil wibran perviy wariant"; break; case 2: cout << "Bil wibran wtoroy wariant"; break; case 3: cout << "Bil wibran tretiy wariant"; break; default: cerr << "Error\n"; } cin.get(); //Ожидание нажатия клавиши Enter } |
Все понятно и отлично росжовано.Спасибо автору!
Можете помочь с заданием ,Дано два числа.Введите Целое число n. Если n=1 то найдите из двух чисел минимум,если n=2 то найдите максимум .
У Вас опечатка в последнем примере:
должно быть:
Да и собственно в остальных строчках то же самое… 😉
А если у меня в case нужно задать промежутки чисел (например от 0 к 100), как тогда?
Вот пример такой задачи (нужно решить за switch):
Определить агрегатное состояние воды по температуре, что выражается целым числом.
Спасибо. А по другом совсем не как? Потому, что если так, то проще сделать на if.
a = a/abs(a); //маленькая хитрость.
Что это за хитрость?)
для case фигурные скобки не обязательны, как и break;(по существу это обычные метки на которые джампится прпограмма при выполнении усоловия кейза) break даёт команду выхода из switch, без неё будут исполняться операторы последовательно.
например совершенно корректный switch
switch(a)
{
case 1: cout<<«если 1 то выполним код и для 5»;
case 5: cout<<«выполним код для 5 и закончим switch»; break;
case 2: cout<«тут код для 2»; break;
}
если а будет равна 1 то при выполнении команд вы переходим на метку для 1 в результате код будет выполняться последовательно пока не дойдёт до break т.е. выведется «если 1 то выполним код и для 5 выполним код для 5 и закончим switch»
для пятёрки у нас будет переход на ссылку case 5 и далее будут операторы выполняться последовательно и выведется только «выполним код для 5 и закончим switch»
для двойки думаю и так понятно.
Можете мне объяснить плз.!
Как составить программу: если на консоле ввести букву а то должна быть возвращена 1, если ввести b- то 2 ? Вообще как работать с текстом на консоле? Я по-всячески попробовал, но когда введется на консоле текст или буква никакой реакции нет.
Покажите ваш кусочек кода абсолютно любой попытки (я не телепат).. и какой компилятор
как решить мне задачу в массиве сколько мне нужно масивов программа компютерная диагностики аудио видео радио аппаратуры
Непонятно вообще ничего.
программа компютерная диагностики аудио видео радио аппаратуры в моей задачи я так понял должно быть считывание бкув и цыфер алгоритм массивы все на ноль а как цвет зделать
Надо пишите код аппаратуром радио показания массив решите авто теле видео завод потом задача указатель диагностикой считывание цыфра буква поделить компьютер массив программировать цвет и вот
Здравствуйте!
Ваш сайт очень помог мне в написании программы, где (в зависимости от введённого значения)
запускаются разные (сторонние) программы. Но внезапно начались проблемы. Программы
запускаются не в зависимости от того, какое ввёл значение (case 1 или case 3), а просто в
порядке последовательности: за 1 идёт 2, потом 3 и т.д. (даже если я после case 1 нажал
case 3, всё равно запустится программа case 2, а потом только (при нажатии любого значения:
хоть 9, хоть 0) запустится case 3 и т.д. То есть: эти выборочные значения case не работают.
В чём может быть ошибка? Вот код:
1. break для каждого case
2. Внутри case ставить фигурные скобки, а в них писать код.
Эдуард, у тебя должно быть вот так примерно:
А чтоб выбор был неограниченным а не однократным как у тебя тут, сделай через цикл while
В помощь автору, недавно перечитывал учебник для начинающих и в голову пришла великолепная идея как в минимум символов (а именно в 1 case уместить промежуток к примеру от 0 до 5000, используя минимум кода), наверно накапливается профессионализм, в общем вот код, понятен до безобразия, все гениальное просто как говорится:
К сожалению, эта версия плоха.
Как упражнение для понимания работы с функциями, вполне нормальное начало, а плоха тем, что используется if.
Для диапазонов всё-таки используют if, а для спортивного интереса решают какие-нибудь задачки, где if и ?: запрещены условием задачи. То, что if засунут вовнутрь функции, не отменяет его наличия.
А Ваш код более короче выглядит так (я только основные части выделю):
И вот так:
Подожди админ, в этой теме идет «обсуждение» оператора выбора switch, я привел пример как в него засунуть диапазон любой размерности, хотя и ты и я нигде в инете такого не нашли. Способ простой и элегантный как облегчить жизнь многим кому нужно в этот switch вставлять диапазоны. Сам помню парился и пытался выкрутится. Вместо спасибо за отличный пример, скажу без скромности он таким и является, ты говориш что он плохой. Хорошо, приведи хороший пример использования диапазона неограниченной размерности в switch за один case.
В продолжении темы, функцию можно расширить как угодно, вплоть даже до замены статичного 5000 на числа вводимые с клавиатуры.
Вот пример модернизации функции и расширение возможности switch
И так какой угодно диапазон можно вставить
Если Вы ждёте ответа, то я ничем не отвечу. Возможны Вы не увидели текста, где пишется: "switch используется в некоторых конструкциях вместо if."
Вместо того, чтобы избежать if, Вы его активно используете. Я об этом.
Примеры выше приведены (сразу перед просьбой), в них тоже есть if, хотя явно и не написан.
Один большой плюс приведу, может так попасться что в программе неоднократно надо узнавать в какой диапазон входят получаемые данные и соответственно на них реагировать, диапазоны статичные а вот выбор действий на эти диапазоны может разнится(день, ночь, утро, вечер, град, дождь и т.д.). Вот тут то мой пример где «ифы» определяющие принадлежность к диапазону собраны в 1 функцию к которой могут обращаться разные «свитчи», и реагировать уже по заданным в них условиях. Согласитесь что так намного проще чем каждый раз выписывать тонну «ифов».
Приведите более конкретно, пожалуйста, если можно, я или не совсем понял или совсем не понял суть описываемой программы.
А разве Вами в Вашу функцию не вписывается тонна ифов?
Ну вот образно:
1-функция «температура» определяет принадлежность получаемых данных к диапазону, как в примере выше «back_»
2-функция «солнечно» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).
3-функция «дождь» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).
3-функция «туман» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).
4-и т.д.
Трудно понять, когда одно к другому логически не вяжется.
Сами посудите: Зависит ли солнечность от температуры? — нет, дождь от температуры? — нет, туман от температуры? — нет. Наоборот же вполне нормально, температура может зависеть от дождя, тумана, солнечности.
если ты к примеру работаеш в аэропорту то все вяжется, если дожть в околонулевую температуру, значит будет облединение как самолета так и посадочной полосы, солнечно и зимой бывает (от температуры атмосферное давление зависит у них обратная взаимосвязь), резкие перепады температуры в туман приводят к шквальному ветру, вплоть до ураганного.
короче, логические связи есть везде и всегда, даже если думаеш что их нет, мы тут не про погоду собрались обсуждать, я тебе гипотетический пример привел
Я ещё один раз спрошу, разве у Вас внутри функции не надо использовать тонну ифов?
Надо, но смысл в том, что использование их только в этой функции может убрать необходимость повторного и неоднократного использования этих ифов, тем самым уменьшая количество кода.
Я через несколько дней напишу небольшой код, сейчас немного занят, но этот код не будет иметь отношение к switch или if как к таковым, он будет иметь отношение к этому нашему разговору.
Вот Вам код программы "Прогноз погоды", посильный новичкам.
Я не обладаю знаниями синоптиков и конкретные комбинации для погоды описать не могу, тем не менее, приведу некоторый код, а Вы будьте добры, покажите целесообразность Вашего подхода своим кодом.
Целесообразность проявится, если Ваш код будет легко читаться и будет гибче показанного.
Здравствуйте! Помогите пожалуйста с заданием задали написать программы в программе switch(задание)
case 1 (д.з №1) и т.д
Т. е. напишите мне мои задания?
Створіть похідний клас «Записна книга», в якому пов’яжіть дату з деякою визначною подією (день народження друга, проведення консультації по С++ тощо). Створіть масив об’єктів похідного класу для занесення списку подій. Організуйте пошук дати деякої події за її назвою, вивід переліку подій, відсортованих по даті, вивід подій у вказаному місяці. Як це зробити