Оператор switch в C: синтаксис, логика и практический пример
Оператор switch в C
В этом руководстве вы узнаете, как создавать чистый, эффективный оператор switch в C, с практическим примером калькулятора.
Конструкция switch позволяет выполнять один блок кода из множества альтернатив. Хотя можно использовать цепочку if…else if, switch даёт более чистый синтаксис и быструю читаемость, особенно когда решение зависит от одного выражения.
Синтаксис switch-case
switch (expression) {
case constant1:
// операторы
break;
case constant2:
// операторы
break;
/* … */
default:
// операторы по умолчанию
}
Как это работает
- Выражение expression вычисляется один раз и сравнивается с каждой меткой case.
- При совпадении выполняется соответствующий блок до
break(или концаswitch). - Если совпадений нет, выполняется опциональный блок
default.
Ключевые моменты
- Пропуск
breakвызывает «проваливание» (fall-through): выполняются последующие case. - Блок
defaultопционален, но настоятельно рекомендуется для обработки ошибок.
Блок-схема оператора switch

Пример: Простой калькулятор
#include <stdio.h>
int main(void) {
char operation;
double n1, n2;
printf("Enter an operator (+, -, *, /): ");
scanf("%c", &operation);
printf("Enter two operands: ");
scanf("%lf %lf", &n1, &n2);
switch (operation) {
case '+':
printf("%.1lf + %.1lf = %.1lf\n", n1, n2, n1 + n2);
break;
case '-':
printf("%.1lf - %.1lf = %.1lf\n", n1, n2, n1 - n2);
break;
case '*':
printf("%.1lf * %.1lf = %.1lf\n", n1, n2, n1 * n2);
break;
case '/':
printf("%.1lf / %.1lf = %.1lf\n", n1, n2, n1 / n2);
break;
default:
printf("Error! operator is not correct\n");
}
return 0;
}
Пример вывода
Enter an operator (+, -, *, /): - Enter two operands: 32.5 12.4 32.5 - 12.4 = 20.1
При вводе - программа переходит к соответствующему case, выполняет вычитание, и break выходит из switch. Если оператор неверен, срабатывает default.
Fall-through (проваливание) — когда это полезно
Иногда намеренное отсутствие break удобно для объединения случаев:
switch (ch) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
printf("Гласная\n");
break;
default:
printf("Согласная или другой символ\n");
}
Ограничения switch в C
- Выражение должно быть целого типа (
int,char,enum). Не работает сfloat,double, строками. - Значения case должны быть константами времени компиляции.
- Дубликаты case недопустимы.
Switch vs if-else цепочка
| Критерий | switch | if-else цепочка |
|---|---|---|
| Читаемость при многих случаях | Высокая | Низкая |
| Типы выражений | Только целые | Любые (включая float, строки) |
| Оптимизация компилятора | Jump table (O(1)) | Последовательная проверка (O(n)) |
| Диапазоны значений | Нет (только константы) | Да (if (x > 0 && x < 10)) |
Язык C
- Цепь с переключателем: практическое руководство по базовым электрическим цепям
- Эксперимент с коммутирующим диодом: Подавление индуктивного отбоя неоновой лампой
- Понимание электрических коммутаторов: типы, функции и применения
- Устранение дребезга контактов механических коммутаторов
- Мультиметры: от аналоговых к цифровым — полное руководство
- Освоение оператора switch в C#: синтаксис, примеры и лучшие практики
- Оператор break в C#: как и когда использовать
- Оператор continue в C#: как эффективно пропускать итерации циклов
- Оператор switch-case в C++: синтаксис, применение и практические примеры
- Базовый синтаксис C: токены, идентификаторы, ключевые слова и пробелы