Загрузка урока...
Switch В этом уроке разберем, как заменить длинную цепочку if/else if/else на switch.
Для примера возьмем функцию charcode(), которая получает символ и возвращает код:
Для символа 'a' функция возвращает 0.
Для символа 'b' функция возвращает 1.
Для любого другого символа функция возвращает 3.
int charcode(char c)
{
if (c == 'a')
return 0;
else if (c == 'b')
return 1;
else
return 3;
}Здесь важно:
Для сравнения используем ==, а не =.
Оператор = выполняет присваивание.
Оператор != означает "не равно".
int charcode(char c)
{
switch (c) {
case 'a':
return 0;
case 'b':
return 1;
default:
return 3;
}
}Ключевое слово case задает отдельные варианты, а default задает ветку для всех остальных значений.
В switch есть важная особенность: если не поставить break, выполнение "проваливается" в следующий case.
Пример с ошибкой:
int charcode(char c)
{
int p;
switch (c) {
case 'a':
p = 0;
case 'b':
p = 1;
default:
p = 3;
}
return p;
}Если передать 'a', результатом все равно станет 3, потому что выполнятся все ветки подряд.
Правильный вариант:
int charcode(char c)
{
int p;
switch (c) {
case 'a':
p = 0;
break;
case 'b':
p = 1;
break;
default:
p = 3;
break;
}
return p;
}Теперь поведение корректное:
Для символа 'a' функция возвращает 0.
Для символа 'b' функция возвращает 1.
Для любого другого символа функция возвращает 3.
Конструкция switch удобна для выбора из нескольких конкретных значений.
Почти в каждом case нужен break, чтобы не было fallthrough.
Ветка default покрывает все остальные значения.
Напишите функцию number_printer(), которая принимает в качестве параметра одно число от 0 до 3 и выводит на экран его эквивалент на английском языке.
Например, для 2 она должна вывести на экран слово "Two". Если число меньше 0 или больше 3, то на экран должно вывестись само число без каких-либо преобразований. Ваша функция должна использовать switch для проверки числа.
В этом материале нет файлов для просмотра.