Инструкция switch
Иногда программа выбирает, что делать, по точному значению одной переменной: кнопка 1 на автомате с напитками делает кофе, кнопка 2 — чай, и так далее. Это можно записать с помощью else if, но в C для этого есть более аккуратная инструкция switch:
int day = 3;
switch (day) {
case 1:
printf("Понедельник\n");
break;
case 2:
printf("Вторник\n");
break;
case 3:
printf("Среда\n");
break;
default:
printf("Другой день\n");
break;
}Программа выведет:
Средаswitch берёт значение в круглых скобках, здесь это значение day, и переходит к тому case, у которого такое же значение. После case идут значение и двоеточие, а под ними — инструкции, которые нужно выполнить. break завершает switch: программа продолжает работу после его закрывающей скобки. default принимает все значения, у которых нет своего case, так же как else в конце цепочки else if. Он необязателен и обычно пишется последним. В последней ветке break не нужен, потому что switch всё равно заканчивается, но хорошая привычка — писать его в каждой ветке.
Будьте внимательны с break. Без него программа не останавливается на следующем case: она проваливается и выполняет инструкции следующих вариантов, пока не дойдёт до break или до конца switch:
int day = 2;
switch (day) {
case 1:
printf("Понедельник\n");
case 2:
printf("Вторник\n");
case 3:
printf("Среда\n");
default:
printf("Другой день\n");
}Программа выведет:
Вторник
Среда
Другой деньПрограмма перешла к case 2 и затем выполнила всё, что ниже. Компилятор ничего не сообщает, так что, если switch выводит больше, чем должен, ищите пропущенный break.
Иногда проваливание — именно то, что нужно: когда у нескольких значений одни и те же инструкции. Тогда строки с их case пишут одну под другой:
int day = 6;
switch (day) {
case 6:
case 7:
printf("Выходной\n");
break;
default:
printf("Рабочий день\n");
break;
}Программа выведет:
Выходнойswitch работает только с целыми числами и символами, например case 3: или case 'A':. Он не может проверять диапазоны вроде temperature > 25 и не работает с десятичными числами: для switch (price) с типом double компилятор сообщит error: statement requires expression of integer type ('double' invalid). Для таких случаев используйте if и else if.
Задание
- 1
В автомате с напитками есть ошибка: по кнопке 2 он выдаёт чай и горячий шоколад. Запустите программу, а затем добавьте пропущенный
break, чтобы она выводила толькоЧайиСпасибо!. - 2
В конце
switch, под последнимbreak, добавьте веткуdefault, которая выводитНеизвестная кнопка. - 3
Измените
buttonна7и запустите программу. Ни у одногоcaseнет значения 7, поэтому программа выводитНеизвестная кнопкаиСпасибо!.