Оператор switch в C




оператор switch, switch c++, switch в с++, оператор множественного выбора, свич с++, основы программирования

У цій статті ми трохи змінимо формат вивчення теми. В начале рассмотрим пример с оператором switch (свич), в котором будет много комментариев о том, что происходит в коде. А вся теория будет располагаться ниже. Роботу оператора множинного вибору switch в C ++ ми розглянемо в рішенні такого завдання: Допустим, у користувача є нумерований список станцій метро Барселони. Необходимо написать код, в котором будет реализован диалог с пользователем, а именно предложено ввести номер станции метро. После ввода номера станции, надо показать на экран её название и время в пути. Если же станции с таким номером нет, повідомити про це і запропонувати ввести номер знову. Приступим:

До строки 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. В этом случае, пользователю больше не будет предложено ввести новое значение.

Вот как работает эта программа:

оператор switch, switch c++, switch в с++, оператор множественного выбора, свич с++

Что следует запомнить:

  • синтаксис:

оператор switch, switch c++, switch в с++, оператор множественного выбора, свич с++

  • блок default можна розташувати в будь-якому місці блоку switch() Наприклад між першим і другим case . Его код в любом случае выполнится только тогда, якщо не знайдеться потрібного значення в блоках case. Але, советую вам располагать его именно в конце, как делают большинство программистов. Это такое негласное правило.
  • в нижнем блоке switch(), будь то default или case, оператор break можна не вказувати. Так сделано в нашем примере. Но следует помнить, что во всех остальных break обов'язковий!
  • default не є обов'язковим. Его в switch() може і не бути зовсім. В таком случае, если ни одно значение блоков case не збіжиться з тим, что принял switch() , программа просто перейдет на следующую строку кода, расположенную под switch()
  • иногда блоки case перевіряють символьні, а не числовые значения. Тогда эти символы необходимо брать в одинарные кавычки – справа "б": , випадок 'G': , випадок '+’ і т.д.

У кого есть желание – посмотрите видео-урок по теме. Помимо оператора множественного выбора switch (17-я минута) в ньому розглянуті умовні оператори if і else, а также тернарный оператор ?: (15-я минута)




Остались вопросы – задавайте их в комментариях. Обязательно всем отвечу. Вивчайте основи програмування разом з нами! Більше прикладів з використанням switch в C ++ розглянуто в статті Завдання: Оператор switch в C .

Нові уроки з програмування:

Оператор switch в C
5 (100%) 4 голосів

33 думки про "Оператор switch в C

  1. Федя, я статтю цю, не писав … і навіть толком не читав. Але сказане в ній про те, що break в гілках вибору практично майже завжди обов'язково, на початкових етапах вивчення дуже корисно.

    вони, Федя, хто за професією пише багато тисяч промислового програмного коду (як я), на відміну від degeneratov, які пишуть тільки коментарі у форумах (як ти) знають, що пропуск break в switch там де він потрібен – причина важких помилок, які знаходяться тільки багатогодинний налагодженням.

    1. 1. «Чукча не читач - чукча письменник!»
      2. “і навіть толком не читав”
      Мені нема чого додати до мого попереднього повідомлення.

    2. Тобто все, хто за професією не супер крутий прогерія з математичним мегаінтеллектом і досвідом розробки рулонів коду – дегенерат?
      тоді ви – однобоко розвинений ботан з претензією.

      як noviček, я особисто розумію, що я не в Окфорд або Кембриджі, що б мене вчили “ідеально” і дуже вдячний Федору за його працю!

  2. Чому мій код не повторюється при введенні неправильного значення?

    1. А як повинен повторюватися код? Я в цьому лістингу швидким поглядом знайшов 6 помилок, через які він не скомпілюється. може, спочатку його хоча б запустити, а вже потім помилки шукати?

      1. Код відображається некорекктно в деяких місцях. А так помилок за версією мого компілятора помилок немає. Але while НЕ дейвствует з якихось причин. Я і просив допомогти мені зрозуміти по яким. А чи не писати порожні коментарі.

  3. Ще одну помилку у Вас знайшов. У вихованні. Виправте і повертайтеся.

    1. Який ви уважний… Так слухайте ж)
      Ви все життя помилки шукаєте. Вас просять допомогти, а ви шукаєте помилки? Якщо вже ви так зарозумілі, то уточніть помилки, які ви у мене в коді знайшли. Хоча весь код – ошибка, сайт відобразив його не так, як він у мене в IDE написаний.

      1. Звідки у Вас інформація, що я все життя шукаю помилки? самі придумали?
        Нас просять допомогти знайти помилку (адже якщо щось не працює або працює не так, в коді помилка?), але помилки ми шукати не повинні? і, якщо код не скомпілюється, то логічні помилки в ньому шукати безглуздо.
        Виходячи з Ваших слів, я гадаю, що для доказу того факту, що я не зарозумілий, мені потрібно просто не уточнювати знайдені мною помилки. Хорошо, я не стану.

  4. Нет, не придумав. За коментарями видно. код компілюється. Просто програма ігнор команду while, от і все. Виходячи з Ваших слів, Ви не можете допомогти мені з моєю проблемою, а значить, пишете коментарі не по темі. Не можете – не треба!

    1. той код, що Ви зуміли привести, НЕ скомпілюється, а іншого коду ми не бачимо, Ви ж не показуєте. але Ви, все ж, хочете, щоб ми телепатично дізналися, який саме код зберігається на Вашому комп'ютері і допомогли вирішити проблему.
      Я припускаю, що while не працює, тому що значення умови (вар == правда) != вірно, але змінна var не визначена і не присвоюється ніде і навіщо вона потрібна, відомо тільки Вам. Але це лише припущення, т.к. в умови може міститися всі, що завгодно, Ви ж не знаєте, що існують pastebin-сервіси, НЕ korežaŝie.

      1. Зніс куди подалі весь код з while. Нет, тут провина не var, адже на моєму комп'ютері (ви смішно це помітили), немає var… Навіть якщо замість var поставити певну trueOrFalse, як і є у мене в IDE, то код не працює.
        Спробую вписати код без тегів
        #include
        using namespace std;

        int main()
        {
        setlocale(LC_ALL, “rus”);
        INT firstNumber = 0;
        INT = друге число 0;
        INT = композиція 0;
        cout <> firstNumber;
        cout <> друге число;
        cout <> склад;

        if (Композиція == firstNumber * друге число)
        {
        cout << "Правильный ответ. Ви за літо не всі забули!";
        }
        else
        cout << "Неправильный ответ. Тепер ви знаєте, чим зайнятися… Попробуйте еще раз! До речі, правильну відповідь – " << firstNumber * друге число << endl;
        }
        }

залишити коментар

Ваша електронна адреса не буде опублікований. Обов'язкові поля позначені * *