переключатель…case в C (оператор Switch в C) с примерами

⚡ Умное резюме

Оператор switch в языке C сравнивает одно выражение с несколькими метками case и запускает соответствующий блок, предлагая более чистую альтернативу длинным цепочкам if-else, когда программе необходимо выбрать одно из множества фиксированных целочисленных или символьных значений.

  • 🔀 Многостороннее ветвление: Оператор switch проверяет одно выражение и переходит к соответствующей метке case.
  • 🏷️ Обозначения дел: В каждом случае используется уникальная целочисленная константа или символьная метка, заканчивающаяся двоеточием.
  • Ключевое слово для прерывания: Оператор break завершает дело; без него исполнение решения не состоится.
  • 🧩 Вариант по умолчанию: Дополнительный блок по умолчанию выполняется, если ни одна метка варианта не соответствует выражению.
  • 📋 Правила переключения: Метки дел остаются неизменными и уникальными, допускается только одна метка по умолчанию.

Оператор Switch в C

Что такое оператор Switch в C?

Оператор switch в языке C проверяет значение переменной и сравнивает его с несколькими вариантами. После того, как найдено совпадение, выполняется блок операторов, связанных с этим конкретным случаем.

Каждый корпус в блоке переключателя имеет свое имя/номер, который называется идентификатором. Значение, предоставленное пользователем, сравнивается со всеми вариантами внутри блока переключателей, пока не будет найдено совпадение.

Если соответствие регистру НЕ найдено, то выполняется оператор по умолчанию, и управление выходит из блока переключателя.

Синтаксис переключения регистра

Общий синтаксис реализации switch-case в программе на 'C' следующий:

switch( expression )
{
	case value-1:
			Block-1;
			Break;
	case value-2:
			Block-2;
			Break;
	case value-n:
			Block-n;
			Break;
	default:
			Block-1;
			Break;
}
Statement-x;
  • Выражение может быть целочисленным или символьным выражением.
  • Value-1, 2, n — это метки вариантов, которые используются для индивидуальной идентификации каждого случая. Помните, что метки регистра не должны совпадать, поскольку это может создать проблемы при выполнении программы. Предположим, у нас есть два случая с той же меткой, что и «1». Тогда при выполнении программы будет выполнен случай, который появляется первым, даже если вы хотите, чтобы программа выполнила второй случай. Это создает проблемы в программе и не обеспечивает желаемого результата.
  • Метки регистра всегда заканчиваются двоеточием ( : ). Каждый из этих случаев связан с блоком.
  • Блок — это не что иное, как несколько операторов, сгруппированных для конкретного случая.
  • Всякий раз, когда выполняется переключатель, значение test-expression сравнивается со всеми случаями, которые мы определили внутри переключателя. Предположим, что тестовое выражение содержит значение 4. Это значение сравнивается со всеми наблюдениями до тех пор, пока в программе не будет найден случай, метка которого равна четырем. Как только случай обнаружен, блок операторов, связанный с этим конкретным случаем, выполняется, и управление переключателем прекращается.
  • Ключевое слово перерыва в каждом случае указывает на конец конкретного случая. Если мы не ставим прерывание в каждом случае, то, даже если конкретный случай будет выполнен, переключатель в C продолжит выполнять все случаи, пока не будет достигнут конец. Этого не должно произойти; следовательно, нам всегда нужно в каждом случае использовать ключевое слово Break. Break завершит выполнение случая, как только он будет выполнен, и элемент управления выпадет из переключателя.
  • Случай по умолчанию является необязательным. Всякий раз, когда значение test-expression не совпадает ни с одним из случаев внутри переключателя, будет выполнено значение по умолчанию. В противном случае не обязательно прописывать в коммутаторе default.
  • Как только переключатель будет выполнен, управление перейдет к оператору-x, и выполнение программы продолжится.

Блок-схема оператора Switch

Следующая диаграмма иллюстрирует выбор случая в случае переключателя:

Блок-схема оператора Switch

Как работает переключатель

Пример случая переключения в C

Следующая программа иллюстрирует использование переключателя:

#include <stdio.h>
    int main() {
        int num = 8;
        switch (num) {
            case 7:
                printf("Value is 7");
                break;
            case 8:
                printf("Value is 8");
                break;
            case 9:
                printf("Value is 9");
                break;
            default:
                printf("Out of range");
                break;
        }
        return 0;
    }

Выход:

Value is 8

Пример случая переключения в C

  1. В данной программе мы инициализировали переменная число со значением 8.
  2. Конструкция переключения используется для сравнения значения, хранящегося в переменной num, и выполнения блока операторов, связанного с совпадающим случаем.
  3. В этой программе, поскольку значение, хранящееся в переменной num, равно восьми, переключатель выполнит вариант, метка которого равна 8. После выполнения случая элемент управления выпадет из переключателя, и программа будет завершена с успешным результатом печать значения на экране вывода.

Попробуйте изменить значение переменной num и обратите внимание на изменение выходных данных.

Например, мы рассмотрим следующую программу, которая по умолчанию:

#include <stdio.h>
int main() {
int language = 10;
  switch (language) {
  case 1:
    printf("C#\n");
    break;
  case 2:
    printf("C\n");
    break;
  case 3:
    printf("C++\n");
    break;
  default:
    printf("Other programming language\n");}}

Выход:

Other programming language

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

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

Мы рассмотрим следующий оператор переключения:

#include <stdio.h>
int main() {
int number=5;
switch (number) {
  case 1:
  case 2:
  case 3:
    printf("One, Two, or Three.\n");
    break;
  case 4:
  case 5:
  case 6:
    printf("Four, Five, or Six.\n");
    break;
  default:
    printf("Greater than Six.\n");}}

Выход:

Four, Five, or Six.

Вложенный переключатель в C

In C, мы можем иметь внутренний переключатель, встроенный во внешний переключатель. Кроме того, константы регистра внутреннего и внешнего переключателя могут иметь общие значения и не конфликтовать.

Рассмотрим следующую программу, которая запрашивает у пользователя ввод его идентификатора. Если идентификатор действителен, программа запросит ввод пароля; если пароль верен, программа выведет имя пользователя, в противном случае — сообщение «Неверный пароль»; а если идентификатор не существует, программа выведет сообщение «Неверный идентификатор».

#include <stdio.h>
int main() {
        int ID = 500;
        int password = 000;
        printf("Plese Enter Your ID:\n ");
        scanf("%d", & ID);
        switch (ID) {
            case 500:
                printf("Enter your password:\n ");
                scanf("%d", & password);
                switch (password) {
                    case 000:
                        printf("Welcome Dear Programmer\n");
                        break;
                    default:
                        printf("incorrect password");
                        break;
                }
                break;
            default:
                printf("incorrect ID");
                break;
        }
}

Выход:

Plese Enter Your ID:
 500
Enter your password:
 000
Welcome Dear Programmer

Вложенный переключатель в C

  1. В данной программе мы инициализировали две переменные: ID и password.
  2. Для сравнения значения, введенного в переменную ID, используется внешний оператор switch. Он выполняет блок операторов, связанный с соответствующим случаем (когда ID==500).
  3. Если оператор блока выполняется с соответствующим вариантом, используется внутренний оператор switch для сравнения значений, введенных в переменную password, и выполнения операторов, связанных с соответствующим вариантом (когда password==000).
  4. В противном случае случай переключения вызовет случай по умолчанию и напечатает соответствующий текст, касающийся структуры программы.

Зачем нам нужен чехол Switch?

Существует одна потенциальная проблема с оператор if-else то есть сложность программы увеличивается всякий раз, когда увеличивается количество альтернативных путей. Если вы используете в программе несколько конструкций if-else, программу может стать трудной для чтения и понимания. Иногда это может сбить с толку даже разработчика, который сам написал программу.

Решением этой проблемы является оператор switch.

Правила для оператора switch

При написании оператора switch на языке C следуйте этим правилам:

  • Выражение всегда должно выполняться до результата.
  • Метки регистров должны быть постоянными и уникальными.
  • Метки регистра должны заканчиваться двоеточием ( : ).
  • Ключевое слово перерыва должно присутствовать в каждом случае.
  • Может быть только одна метка по умолчанию.
  • Мы можем вкладывать несколько операторов переключения.

Часто задаваемые вопросы (FAQ)

Переключатель переменного тока принимает только целочисленные значения (int), символы (char) и перечисления (enum) — никогда не принимает числа с плавающей запятой или строки, поскольку каждая метка должна быть постоянным целым числом.

Без прерывания управление прерывается, и все последующие случаи также выполняются — иногда это сделано намеренно, но обычно это случайная ошибка.

Нет. В C нельзя использовать оператор switch для строк; метки должны быть константными целыми числами. Вместо этого сравнивайте текст с помощью strcmp внутри оператора if-else.

В стандарте C запрещены диапазоны, хотя GCC допускает непереносимый случай 1…5: расширение, которого следует избегать переносимому коду.

Нет. Вариант по умолчанию может располагаться где угодно; он выполняется только тогда, когда ни одна метка не соответствует действительности. Последнее размещение — это всего лишь условность.

Да, но заключите тело оператора в фигурные скобки; в противном случае объявление после метки может вызвать ошибки компиляции.

Да. ИИ-помощники в программировании создают блоки switch, добавляют каждый break и отмечают случайные провалы. Всегда проверяйте сгенерированную логику.

Второй пилот GitHub Автоматически дополняет метки case, вставляет операторы break и преобразует длинные цепочки if-else из комментария в оператор switch.

Подведем итог этой публикации следующим образом: