C Урок 10. Оператор switch



Очень часто при составлении исходного кода будущей программы мы сталкиваемся с ситуацией, когда дальнейший ход нашей программы зависит от конкретного значения какой-то переменной либо выражения, причём когда выбор таких значений, мягко говоря, немаленький. Мы, конечно же в данном случае можем воспользоваться условными конструкциями if, else, else if, но в данном случае это будет не совсем удобно и читабельно. Для этой ситуации существует такая конструкция, чтобы было очевидно, что мы выбираем какие-то конкретные варианты значений одной переменной или одного выражения.

И таким оператором и служит switch, который также можно отнести к оператору ветвления. Также данный оператор очень часто называют оператором вариантов. Ещё в народе его зовут переключателем в соответствии с его переводом на русский.

switch — оператор, который сравнивает последовательно значение переменной, находящейся в скобках со всеми вариантами значений, находящимися после каждого ключевого слова case. При совпадении данных значений выполняется код, следующий за case. Затем, если встретится ключевое слово break либо закрывающая фигурная скобка, произойдет выход из конструкции switch. Если со значением переменной не совпадет ни одно из значений, выполнится код после необязательной инструкции default

 

 

 

Оператор break в ветвях case является необязательным. Если его не будет в какой-то из ветвей, то выхода из тела оператора не произойдёт и код продолжит выполнение дальше внутри тела. Причём, если дальше встретится следующая ветвь case, то её код выполнится независимо от сравниваемого значения. Приём без break используется как правило для того, чтобы выполнить ту или иную ветвь в зависимости не от одного, а от нескольких вариантов значения переменной (выражения), находящейся(гося) в скобках. Выглядеть такая ветвь будет примерно вот так

 

 

или вот так

 

 

Ветвь default, как было указано выше, также необязательна и при её отсутствии в случае несовпадения значения переменной или выражения ни с одним значением в вариантах ничего не делается, то есть ни один участок кода, находящийся в теле оператора switch, не будет выполнен.

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

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

И давайте теперь перейдём к нашей практической части. Я постараюсь дать такой простой пример, который будет понятен каждому. Пусть он не пригодится в будущем, но сейчас самое важное для нас то, чтобы мы уяснили, как именно работает конструкция switch.

Создадим новый проект из проекта прошлого занятия с именем MYPROG09 и присвоим ему имя MYPROG10.

Откроем файл main.c и в функции main(), как обычно, удалим весь код тела кроме возврата нуля, останется от него вот это

 

int main()

{

  return 0; //Return an integer from a function

}

 

 

Добавим код, в котором программа попросит пользователя ввести целое число из предложенных вариантов. Затем мы введённое пользователем число с помощью оператора switch, с которым мы познакомились выше, обработаем соответствующим образом. В свою очередь, ввод числа и конструкцию switch мы также обернём в бесконечный цикл, чтобы нас после каждого ввода числа не выбрасывало из программы

 

 

Бесконечный цикл получился условным. Если мы введём число, которое не совпадёт ни с одним из вариантов case, то мы попадаем в ветвь default, в которой мы после вывода пользователю соответствующего сообщения всё-же выйдем из программы благодаря оператору return. Вообще данный оператор предназначен для выхода из функции, но в нашем случае это будет и выход из программы.

Проверим работу нашего кода

 

 

Всё прекрасно работает. Когда мы ввели число 15, которое не совпадает ни с одним из вариантов, то мы после выданного сообщения благополучно вышли из нашего приложения.

Теперь давайте к «кейсу» с числом 20 добавим ещё один вариант (кейс) и сделаем так, что в данную ветвь мы будем попадать не только при вводе числа 20, но и при вводе числа 25. Также исправим и сообщение, которое программа будет в данном случае выдавать пользователю

 

 

Также в сообщении давайте тоже включим число 25

 

printf("Enter an integer of 10, 20, 25, 30, 40, or 50\r\n");

 

Проверим, как это работает

 

 

Всё отлично срабатывает!

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

Всем спасибо за внимание!

 

 

Предыдущий урок Программирование на C Следующий урок

 

 

Исходный код

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

C Оператор switch

Один комментарий на “C Урок 10. Оператор switch
  1. Volderon:

    Выходит данная конструкция позволяет экономить память, что критично для микроконтроллера? Удивительно.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*