switch в C++ для начинающих

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Пришло время познакомиться и изучить новый материал. Зачем нужен switch в C++ и как его использовать? Для новичков это не самое приятное для изучения, но и далеко не самое сложное. switch представляет собой некоторое усовершенствование команды if и используется в некоторых конструкциях вместо if.
Используется если нужно выбрать какое-то определенное действие, проанализировав выбор пользователя (когда у пользователя множество вариантов и нужно на основе одного выбранного из них сделать так, чтобы программа вела себя так, как указал пользователь)
Простейший пример: Использование switch в C++ для создания меню пользовательского выбора
Если конструкция сравнений достаточно сложная, то используя команду if очень легко запутаться, тут нам и приходит на помощь switch

Минимальная программа С++, использующая switch

Эта программа ничего не делает, но это своеобразный скелет, где написано минимум функций для более быстрого восприятия правильности её написания
То, что тут написано — аналог if (a=1) break;

Когда мы указываем, что собираемся работать с командой switch, то мы должны указать переменную (например переменную, используемую для нажатия клавиши), которую switch должен проанализировать

В нашем примере объявлена только одна целочисленная переменная int a;
Мы указываем нашей программе, что в зависимости от значений переменной а программа должна принимать решения как работать:
switch (a) — В зависимости от значения а — программа выполняет необходимые функции.
После того как мы определили какая нам переменная необходима для анализа, мы основной блок действий заключаем в фигурные скобки:

Каждое новое действие сопровождается дополнительной командой case

Наши варианты выполнения программы зависят от значений а:

Если а=1 — то программа выполняет Первый вариант работы
Если а=2 — то программа выполняет Второй вариант работы
Если а=3 — то программа выполняет Третий вариант работы

Таких вариантов могут быть сотни и тысячи

Простейший пример — работы команды switch , выводит на экран сообщения:
Выбран первый вариант
Выбран второй вариант
Выбран третий вариант

Такой код достаточно удобно читать и надеюсь вы, как и я, сумели разобраться с этим не самым простым в С++ для начинающих, но очень удобным способом. В последующих статьях я его буду применять, так что разобраться с принципом построения вам наверняка стоит

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

  • когда С++ встречает switch в своем коде, то все описываемые условия сразу соответствуют выполненному условию

. Чтобы этого избежать необходим break Прочитать можно так: «Если выполнено это условие, то выполнить нужные действия. После выполнения нужного кода прервать выполнение switch и продолжить выполнение основной программы» Кроме этого, в switch можно использовать слово default.

В этом коде происходит ввод a с клавиатуры. В зависимости от значения a, в программе срабатывают разные условия. Описано два. Первое — если a==1 то вывести на экран one, Второе — если a==2 то вывести на экран two, Третье — все что не вошло в описание выводит на экран значение a

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

32 комментария: switch в C++ для начинающих

  • Anonymous говорит:

    Все понятно и отлично росжовано.Спасибо автору!

  • Sergio говорит:

    У Вас опечатка в последнем примере:

    должно быть:

    Да и собственно в остальных строчках то же самое… 😉

    Автор сайта отвечает:
    Спасибо. исправил.

  • Евгений говорит:

    А если у меня в case нужно задать промежутки чисел (например от 0 к 100), как тогда?
    Вот пример такой задачи (нужно решить за switch):
    Определить агрегатное состояние воды по температуре, что выражается целым числом.

    Автор сайта отвечает:
    немного геморрно. Смысл, надеюсь поймете. Я все не стану делать. Задание ваше простое, но муторное.
    http://otvet.mail.ru/question/83369047

    Спасибо. А по другом совсем не как? Потому, что если так, то проще сделать на if.

    Автор сайта отвечает:
    Честно говоря не знаю. Способов не нашел.
    Пример с водой можно несложно решить и через switch,
    но для работы с диапазоном значений однозначно лучше использовать if
    Ваша задача простая, немного муторная, но достаточно полезна для новичка. Ибо такая задача учит мыслить.

    Вот пример полного решения.

    Я заодно узнал, что вложенные switch использовать не получится 😀

    a = a/abs(a); //маленькая хитрость.
    Что это за хитрость?)

    Автор сайта отвечает:
    Получение знака (плюс или минус). Благодаря этому кусочку если введенное число не вошло в диапазон (0..99 по примеру), то далее а всегда будет или -1 или +1
    Вообще если эту маленькую хитрость использовать, то надо учитывать, что может случится деление на ноль, но в моем примере деления на ноль не будет.
    Вот еще пример (добавлен). Думаю эти нехитрые примеры могут оказаться кому-то полезны.
    Маленькие математические хитрости и switch работает с диапазоном чисел.

  • Максим говорит:

    для 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»
    для двойки думаю и так понятно.

  • Umid говорит:

    Можете мне объяснить плз.!
    Как составить программу: если на консоле ввести букву а то должна быть возвращена 1, если ввести b- то 2 ? Вообще как работать с текстом на консоле? Я по-всячески попробовал, но когда введется на консоле текст или буква никакой реакции нет.

  • андре говорит:

    как решить мне задачу в массиве сколько мне нужно масивов  программа компютерная диагностики аудио видео радио аппаратуры

  • андре говорит:

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

    • Axl говорит:

      Надо пишите код аппаратуром радио показания массив решите авто теле видео завод потом задача указатель диагностикой считывание цыфра буква поделить компьютер массив программировать цвет и вот

  • Эдуард говорит:

    Здравствуйте!

    Ваш сайт очень помог мне в написании программы, где (в зависимости от введённого значения)

    запускаются разные (сторонние) программы. Но внезапно начались проблемы. Программы

    запускаются не в зависимости от того, какое ввёл значение (case 1 или case 3), а просто в

    порядке последовательности: за 1 идёт 2, потом 3 и т.д. (даже если я после case 1 нажал

    case 3, всё равно запустится программа case 2, а потом только (при нажатии любого значения:

    хоть 9, хоть 0) запустится case 3 и т.д. То есть: эти выборочные значения case не работают.

    В чём может быть ошибка? Вот код:

  • Vladimir говорит:

    Эдуард, у тебя должно быть вот так примерно:

  • Vladimir говорит:

    А чтоб выбор был неограниченным а не однократным как у тебя тут, сделай через цикл while

  • Vladimir говорит:

    В помощь автору, недавно перечитывал учебник для начинающих и в голову пришла великолепная идея как в минимум символов (а именно в 1 case уместить промежуток к примеру от 0 до 5000, используя минимум кода), наверно накапливается профессионализм, в общем вот код, понятен до безобразия, все гениальное просто как говорится:

    • admin говорит:

      К сожалению, эта версия плоха.
      Как упражнение для понимания работы с функциями, вполне нормальное начало, а плоха тем, что используется if.

      Для диапазонов всё-таки используют if, а для спортивного интереса решают какие-нибудь задачки, где if и ?: запрещены условием задачи. То, что if засунут вовнутрь функции, не отменяет его наличия.

      А Ваш код более короче выглядит так (я только основные части выделю):

      И вот так:

  • Vladimir говорит:

    Подожди админ, в этой теме идет «обсуждение» оператора выбора switch, я привел пример как в него засунуть диапазон любой размерности, хотя и ты и я нигде в инете такого не нашли. Способ простой и элегантный как облегчить жизнь многим кому нужно в этот switch вставлять диапазоны. Сам помню парился и пытался выкрутится. Вместо спасибо за отличный пример, скажу без скромности он таким и является, ты говориш что он плохой. Хорошо, приведи хороший пример использования диапазона неограниченной размерности в switch за один case.
    В продолжении темы, функцию можно расширить как угодно, вплоть даже до замены статичного 5000 на числа вводимые с клавиатуры.

  • Vladimir говорит:

    Вот пример модернизации функции и расширение возможности switch

    И так какой угодно диапазон можно вставить

    • admin говорит:

      Если Вы ждёте ответа, то я ничем не отвечу. Возможны Вы не увидели текста, где пишется: "switch используется в некоторых конструкциях вместо if."
      Вместо того, чтобы избежать if, Вы его активно используете. Я об этом.
      Примеры выше приведены (сразу перед просьбой), в них тоже есть if, хотя явно и не написан.

  • Vladimir говорит:

    Один большой плюс приведу, может так попасться что в программе неоднократно надо узнавать в какой диапазон входят получаемые данные и соответственно на них реагировать, диапазоны статичные а вот выбор действий на эти диапазоны может разнится(день, ночь, утро, вечер, град, дождь и т.д.). Вот тут то мой пример где «ифы» определяющие принадлежность к диапазону собраны в 1 функцию к которой могут обращаться разные «свитчи», и реагировать уже по заданным в них условиях. Согласитесь что так намного проще чем каждый раз выписывать тонну «ифов».

  • Vladimir говорит:

    Ну вот образно:
    1-функция «температура» определяет  принадлежность получаемых данных  к диапазону, как в примере выше «back_»

    2-функция «солнечно» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).

    3-функция «дождь» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).

    3-функция «туман» отправляет данные в функцию «температура» дабы узнать в какой диапазон они входят и чтобы соответственно среагировать(через свитч, набор действий для этой функции уникальный).

    4-и т.д.

    • admin говорит:

      Трудно понять, когда одно к другому логически не вяжется.
      Сами посудите: Зависит ли солнечность от температуры? — нет, дождь от температуры? — нет, туман от температуры? — нет. Наоборот же вполне нормально, температура может зависеть от дождя, тумана, солнечности.

  • Vladimir говорит:

    если ты к примеру работаеш в аэропорту то все вяжется, если дожть в околонулевую температуру, значит будет облединение как самолета так и посадочной полосы, солнечно и зимой бывает (от температуры атмосферное давление зависит у них обратная взаимосвязь), резкие перепады температуры в туман приводят к шквальному ветру, вплоть до ураганного.

  • Vladimir говорит:

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

  • Vladimir говорит:

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

  • admin говорит:

    Я через несколько дней напишу небольшой код, сейчас немного занят, но этот код не будет иметь отношение к switch или if как к таковым, он будет иметь отношение к этому нашему разговору.

    • admin говорит:

      Вот Вам код программы "Прогноз погоды", посильный новичкам.
      Я не обладаю знаниями синоптиков и конкретные комбинации для погоды описать не могу, тем не менее, приведу некоторый код, а Вы будьте добры, покажите целесообразность Вашего подхода своим кодом.
      Целесообразность проявится, если Ваш код будет легко читаться и будет гибче показанного.

  • Марина говорит:

    Здравствуйте! Помогите пожалуйста с заданием задали написать программы в программе switch(задание)

    case 1 (д.з №1) и т.д

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Классическая ошибка, которую совершают проектировщики абсолютно надежных систем, – недооценка изобретательности клинических идиотов.

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок