Аналог оператора if-else на много альтернативных вариантов выполнения. Однако, так как используются не любые выражения, а только константы, сильно оптимизирован.
switch (выражение) {
case константа1:
операторы1
case константа2:
операторы2
default:
операторы3
}
Идём сверху вниз и проверяем на соответствие константе. В случае соответствия,
выполняются операторы (не оператор, а операторы!). Чтобы остановить проверку
(а она продолжится далее), вызываем break
– он прерывает поток выполнения
циклов или оператора switch
, возвращаясь на уровень выше.
Если никто так нас и не остановил, а варианты закончились – переходим к
"ветке" default
.
Пример кода для получения текста "комментарий/комментариев" в зависимости от их числа:
#include <stdio.h>
int main (void) {
unsigned a = 1;
char *text; // Указатель на символы - поймём позднее
switch (a % 10) {
case 1:
text = "комментарий";
break;
case 2:
case 3:
case 4:
text = "комментария";
break;
case 5: case 6: case 7: case 8: case 9: case 0:
text = "комментариев";
default:
return 1;
}
puts(text);
return 0;
}
Пока смотрим только на оператор switch. Всё остальное – чтобы заработал пример, а сам пример не был бы совсем выдуманным.