Оператор switch-case в C: синтаксис, примеры и лучшие практики
Что такое оператор switch в C?
Конструкция switch вычисляет одно выражение и направляет поток программы к соответствующей метке case. Если совпадение не найдено, выполняется опциональный блок default. Этот инструмент принятия решений особенно полезен при обработке дискретных константных значений, таких как пункты меню, коды ошибок или выбор пользователя.
Каждый case уникально идентифицируется константным выражением. Когда значение выражения совпадает с меткой case, выполняется соответствующий блок операторов, и выполнение выходит из switch (если не опущен break, что вызывает fall-through — провал).
Синтаксис switch-case
switch (expression) { case constant1: // statements break; case constant2: // statements break; // … default: // statements break; } // statements following the switch
expressionдолжен вычисляться в интегральный или enum тип.- Метки case — константные значения; дубликаты создают неоднозначность и их следует избегать.
- Каждый
caseзаканчивается двоеточием и за ним следует блок кода. - Используйте
breakдля завершения case; без него выполнение продолжится в последующие case (fall-through). - Блок
defaultопционален и выполняется только когда ни один case не совпал.
Как работает оператор switch
На следующем блок-схеме показан процесс принятия решения для оператора switch:

Пример 1: Базовый switch
#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
Пример 2: Использование default
#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"); } return 0; }
Вывод:
Other programming language
Пример 3: Объединенные case
#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"); } return 0; }
Вывод:
Four, Five, or Six.
Вложенные switch
Switch-конструкции можно вкладывать, позволяя иерархическое принятие решений. Следующий пример демонстрирует простой поток аутентификации:
#include <stdio.h> int main() { int ID, password; printf("Please Enter Your ID:\n"); scanf("%d", &ID); switch (ID) { case 500: printf("Enter your password:\n"); scanf("%d", &password); switch (password) { case 0: printf("Welcome Dear Programmer\n"); break; default: printf("Incorrect password\n"); } break; default: printf("Incorrect ID\n"); } return 0; }
ВЫВОД:
Please Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer

Почему switch предпочтительнее длинных цепочек if-else
Хотя цепочки if-else могут достичь той же логики, они становятся громоздкими по мере роста количества вариантов. Операторы switch предлагают более чистый синтаксис, лучшую читаемость и могут быть оптимизированы компилятором в таблицы переходов для константных выражений.
Правила использования switch
- Управляющее выражение должно быть интегральным или enum типом.
- Метки case должны быть константными, уникальными значениями.
- Каждая метка case заканчивается двоеточием.
- Используйте
breakдля предотвращения непреднамеренного fall-through. - Допускается только одна метка
default. - Вложенные switch разрешены и часто полезны.
Ключевые выводы
- Switch — надежный инструмент принятия решений для дискретных значений.
- Всегда включайте
break(если не нужен намеренный fall-through). - Держите метки case уникальными и константными.
- Блок
defaultопционален, но рекомендуется для обработки ошибок. - Вложенные switch обеспечивают многослойную логику принятия решений.
Язык C
- Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
- Цикл do-while в C++: синтаксис, примеры и вложенные циклы
- Оператор switch-case в C++: синтаксис, применение и практические примеры
- Указатели в C++: концепции, примеры и практические применения
- Перегрузка операторов в C++: практическое руководство с примерами кода
- Функции в C++: подробное объяснение с практическими примерами кода
- Коллекции в C#: практическое руководство с реальными примерами
- Функция print() в Python: практическое руководство с примерами
- Мастерство метода str.count() в Python: как подсчитывать символы и подстроки с примерами
- Функция round() в Python: подробное объяснение с практическими примерами