Переключатель
Переключатель используется, если для каждого из нескольких возможных значений выражения нужно выполнить определенные действия. Синтаксис переключателя такой:
switch (переключающее_выражение)
{ case константное_выражение_1: операторы_1;
case константное_выражение_2: операторы_2;
. . .
case константное_выражение_n: операторы_n;
default: операторы_n+1;
}
Оператор switch передает управление тому оператору, константное_выражение которого совпадает со значениями переключающего_выражения.
Переключающее_выражение должно быть целочисленным, или его значение приводится к целому.
Все константные_выражения приводятся к типу переключающего выражения. Они должны быть разными по значению, но одного типа.
Любой из операторов в конструкции switch , может быть помечен одной или несколькими метками через пробел, после каждой стоит двоеточие. Оператор, помеченный меткой, может быть составным или блоком. Внутри переключателя могут находиться описания и определения переменных.
Если значение переключающего выражения не совпадает ни с одним из константных выражений, то выполняется переход к операторам с меткой default: . В каждом переключателе может быть только одна метка default . Если эта метка отсутствует, то не выполняется ни один из операторов.
Пример.
#include <stdio.h>
void main()
{int a;
puts(“Введите целое число”);
scanf(“%d”,&а); // ввод с клавиатуры переменной а (пусть 2)
switch (а)
{ case 0: printf (“это нуль”);
case 1: printf (“это единица”);
case 2: printf (“это двойка”);
default: printf (“это больше двух”);
}
}
Метки не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выход из переключателя, то в нем выполнятся все операторы последовательно, начиная с той метки, на которую передано управление. В нашем примере, если a=2, напечатается это двойка это больше двух .
Для того чтобы выполнялась только одна группа операторов, предусмотрен оператор break . Если поместить оператор break после каждой группы операторов, то выполниться только та группа, константное_выражение которого совпало с переключающим_выражением.
Рис.5а – Блок-схема работы оператора Рис.5б – Блок-схема работы оператора
переключателя переключателя с оператором break
Пример 2.6 . По введенному знаку
void main( ) выполняется соответствующее арифметическое действие:
#include <stdio.h>
{char oper;
float x=2.8,y=4.0, z;
printf(“Введите знак операции\n”);
scanf(“%c”,&oper);
switch (oper)
{ case ‘+’: { z=x+y;
printf(“z=%.1f+%.1f=%.1f\n”,z);}
break;
case ‘–’: { z=x–y;
printf(“z=%.1f-%.1f=%.1f\n”,z);}
break;
case ‘*’: { z=x*y;
printf(“z=%.1f*%.1f=%.1f\n”,z);}
break;
case ‘/’: { z=x/y;
printf(“z=%.1f/%.1f=%.1f\n”,z);}
break;
default: printf(“эту операцию не знаю\n”);
}
}
Перед группой операторов может быть помещено несколько константных выражений (меток).
Пример 2.7 . По номеру месяца определяется пора года
#include <stdio.h>
void main( )
{int n;
printf (“Введите номер месяца\n”);
scanf(“%d”,&n);
switch (n)
{ case 1:
case 2:
case 12: puts(“этo зима”); break;
case 3:
case 4:
case 5: puts(“этo весна”); break;
case 6:
case 7:
case 8: puts(“этo лето”); break;
case 9:
case 10:
case 11: puts(“этo осень”); break;
default: puts(“Такого месяца нет”);
}
}