Структура switch-case является наиболее сложным инструментом принятия решений на языке Си. Да, троичный оператор более загадочный, но правильная структура регистра переключателей включает в себя больше ключевых слов: switch , case , default и break . Перерыв ключевое слово , что я чувствую делает структуру самым интересным.

Как инструмент принятия решения, switch-case обрабатывает множественные сравнения: аргумент switch сравнивается с каждой константой case . Только когда сравнение истинно, выполняются операторы, принадлежащие случаю . Когда ни один аргумент case не соответствует, выполняются операторы, относящиеся к default, но даже тогда default является необязательным.

Ниже приведен код для типичной структуры корпуса коммутатора . Значение переменной alphaсравнивается с константами, установленными после каждого из операторов case .

#include <stdio.h>

int main ()
{
    int alpha = 5;

    Переключатель (альфа)
    {
        Случай 1:
            ставит ( "один");
            перерыв;
        случай 2:
            ставит ( "Два");
            перерыв;
        случай 3:
            ставит ( "Три");
            перерыв;
        дело 4:
            путы ( "Четыре");
            перерыв;
        дело 5:
            путы ( "Пять");
            перерыв;
        дефолт:
            Put («Вне диапазона»);
    }

    Возвращение (0);
}

Значение константы последнего оператора case 5 соответствует значению alpha, поэтому выводится «Five». Оператор break выходит из структуры switch-case . Вот вывод:

Five

Вот вывод, когда все операторы break удалены:

Five
Out of range

Поскольку ни один из предыдущих операторов case не соответствует 5, их операторы не выполняются. Но поскольку разрыв в case 5:операторе удален, вы также видите операторы из условия по умолчанию .

Когда значение alphaизменяется на 1 и операторы break удаляются, вот вывод:

One
Two
Three
Four
Five
Out of range

Хотя значение alphaне совпадает с последующими значениями оператора case , выполнение в любом случае проваливается в эти операторы.

В некотором смысле это помогает воспринимать ключевое слово case как метку, а не как контролирующую часть структуры. Его значение сравнивается, но само утверждение case не является барьером; как только оператор case звучит как true, выполнение последовательно и последовательно проходит через остальную часть структуры switch-case . То есть, если не найдено заявление на разрыв .

Кроме того, вы не можете обмануть компилятор, установив два оператора case с одинаковым значением. (И я не знаю, почему это было бы целесообразно.) Если вы попытаетесь установить два оператора case с одинаковым значением, компилятор выдаст двойную ошибку значения регистра. Серьезно, если вам нужно больше заявлений на матч, поставить их всех после одного случая состояния.

Эффект от падения структуры переключателя может быть преимуществом. Я продемонстрирую, как на уроке следующей недели .