У цій статті ми трохи змінимо формат вивчення теми. В начале рассмотрим пример с оператором switch(свич), в котором будет много комментариев о том, что происходит в коде. А вся теория будет располагаться ниже.
Роботу оператора множинного виборуswitch в C ++ ми розглянемо в рішенні такого завдання: Допустим, у користувача є нумерований список станцій метро Барселони. Необходимо написать код, в котором будет реализован диалог с пользователем, а именно предложено ввести номер станции метро. После ввода номера станции, надо показать на экран её название и время в пути. Если же станции с таким номером нет, повідомити про це і запропонувати ввести номер знову. Приступим:
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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | #include <iostream> using namespace std; int main() { setlocale(LC_ALL, "rus"); int answer = 0; // будет хранить выбор пользователя bool var = true; // управляющая переменная цикла do while cout << "Введите номер станции метро, для расчета времени в пути (от 1 до 5): "; do{ cin >> answer; // ввод значения switch (answer) // switch принимает переменную answer и ищет подходящий case { case 1: // если answer равно 1, на экран выйдут сообщения этого case cout << "Станция метро Trinitat Nova: "; cout << "Время в пути - 15 мин." << endl; break; // выход из switch. иначе будет переход case(2) и т.д. case 2: // если answer равно 2 cout << "Станция метро Casa de l’Aigua: "; cout << "Время в пути - 19 мин." << endl; break; case 3: cout << "Станция метро Torre Baro Vallbona: "; cout << "Время в пути - 25 мин." << endl; break; case 4: cout << "Станция метро Ciutat Meridiana: "; cout << "Время в пути - 30 мин." << endl; break; case 5: cout << "Станция метро Can Cuias: "; cout << "Время в пути - 38 мин." << endl; break; default: // если ни один case не сработал, сработает default cout << "Станции под номером " << answer << " нет! "; cout << "Сделайте правильный выбор (от 1 до 5): "; } // если введено правильное значение (от 1 до 5) // default не сработает и выполнится блок if // переменная var примет значение false // и цикл do while не повторится if (answer >= 1 && answer <= 5) var = false; } while (var); //цикл повторится, пока var не изменит значение на false return 0; } |
До строки 13 – всё понятно: объявление необходимых переменных, вывод вопроса на экран, и вход в цикл do while. В рядку 14 ми отримали значенняanswer, которое ввёл пользователь. Далее смотрите, как интересно работает switch() : в круглых скобках передаём ему answer (рядок 16) і біля кожного словаcase записуємо можливі значенняanswer, які може ввести користувач (1, 2, 3 …).
після кожного case ви бачите оператор : , он обязателен. За ним следуют команды, которые должны быть выполнены, если значениеcase співпаде зі значенням answer. операторbreak в кінці кожного блоку case так само є обов'язковим. Он показывает компилятору, что если этот case був виконаний, то надо выйти из switch(). Тобто фактично, когда выполняется switch () починається перебір і пошук необхідного case.
Еслиanswer равно 1, сработает case 1 і на екран буде показано те, що в ньому прописано до ключового словаbreak, а все остальные case, будут проигнорированы. Если answer равно 2 – виконається тількиcase 2 і відбудеться вихід з switch(). А что если ни одно значение блоков case не збіжиться, с тем значением, что принял switch() (в нашем случае answer)? Для цього передбачений блокdefault. До него доходит дело, как раз тогда, когда ни один case не відпрацьовані і, соответственно, не відпрацьовані жоденbreak цих блоків.
У нашому прикладі, он сработает если значение, которое введет пользователь, будет <1 или >5. Тогда пользователь увидит на экране сообщение о том, что станции метро с таким номером нет и необходимо повторить ввод.
В цикле, ми постійно перевіряємо значенняanswer, которое введено пользователем. Делаем это с помощью if . Якщо значення знаходиться в рамках відповідного нам діапазону (от 1 до 5 ), то управляющей переменной var буде присвоєно значення 0. В этом случае, пользователю больше не будет предложено ввести новое значение.
Вот как работает эта программа:
Что следует запомнить:
- синтаксис:
- блокdefault можна розташувати в будь-якому місці блокуswitch() Наприклад між першим і другим case . Его код в любом случае выполнится только тогда, якщо не знайдеться потрібного значення в блоках case. Але, советую вам располагать его именно в конце, как делают большинство программистов. Это такое негласное правило.
- в нижнем блоке switch(), будь тоdefault или case, оператор break можна не вказувати. Так сделано в нашем примере. Но следует помнить, что во всех остальных break обов'язковий!
- default не є обов'язковим. Его в switch() може і не бути зовсім. В таком случае, если ни одно значение блоков case не збіжиться з тим, что принял switch() , программа просто перейдет на следующую строку кода, расположенную под switch()
- иногда блоки case перевіряють символьні, а не числовые значения. Тогда эти символы необходимо брать в одинарные кавычки – справа "б": , випадок 'G': , випадок '+’ і т.д.
У кого есть желание – посмотрите видео-урок по теме.
Остались вопросы – задавайте их в комментариях. Обязательно всем отвечу. Вивчайте основи програмування разом з нами! Більше прикладів з використаннямswitch в C ++ розглянуто в статті Завдання: Оператор switch в C .
#include
#include
using namespace std;
int main()
{
setlocale(LC_ALL, “RU”);
ІНТ відповідь;
cout << "\a \a\a";
cout << " \t Як справи користувач?" <> answer;
switch (answer)
{
case (“нормально”):
case (“добре”) :
case (“Хорошо”) :
case (“нормально”) :
case (“відмінно”) :
case(“Otilichno”) :
break;
cout << "Ок тогда начинаем" << endl;
case ("не очень"):
case ( "плохо:пойдет") :
case ("не спрашивай") :
case ( "Не очень" ):
case ("Плохо пойдет" ):
case ( "Не спрашивай") :
cout << "Ок тогда в другой раз заходи" << endl;
break;
default:
cout << "Пожалуйста граматно пиши" << endl;
}
system("pause");
return 0;
}
хто небудь допоможіть мені
ти в int хочеш рядок запхати?
Цей урок йде у гілці “Цикли і оператори розгалуження” за №3. У цій програмі використовуються оператори do і while, які розглядаються тільки в №6. коротше, краще думаю їх поміняти місцями чи щось таке, я далі ще не переглядав, але мені не зрозуміло, як у цій програмі працюють ці оператори..
Допоможіть будь ласка, Я початківець.
float AddVat(плаваюча ціна, int категорія)
float total_price=0;
Завдання полягає в тому, щоб функція обчислила і повернула загальну вартість, включаючи податок (заборонено використовувати scanf, тільки switch)
Податки:
1 категорія 20%
2- 20%
3-20%
4-15%
5-8%
6-0%
Не зрозуміло яким чином case: вірує значення змінної int answer = 0 підміняючи її
if else логіки більше
Навіщо тут do while???
Воно ж і без цього працює, а cin можна розмістити і за циклом і все так само працюватиме