Оператор-переключатель switch
Оператор-переключатель switch используется для выбора одного из нескольких альтернативных путей выполнения программы. Выполнение даного оператора начинается с вычисления значения, которое идет после switch в скобках. После этого выполняется та часть кода этого оператора, где значение условия совпадет с веткой case. После ветки case обязательно идет оператор break, который обрывает дальнейшее выполнение оператора switch и передает выполнение программы в точку, которая следует сразу после блока switch.
Для лучшего понимания рассмотрим пример. Эдесь вычисляемым значением будет целая переменная а, в зависимости от значения переменной а, будет выполнятся та ветка case, которая будет равна а. В случае, если ни одно из case не равно а, то выполнится ветка default.
int a=1; int b=100;
switch (a) // вычисляем а = 1
{
case -5: // эта ветка не выполнится, так как 1 не равно -5
b=-5;
break;
case 1: // а эта ветка выполнится, 1 = 1
b=2; // после выполнения этой ветки b присвоится 2
break;
default: // эта ветка выполнится, если ни одна из веток case не выполнилась
b=0;
}
Следует добавить, что веток case в операторе switch может быть сколько угодно, а ветка default может опускаться (не использоваться).
Основное назначение оператора switch - заменить оператор if, когда в нем есть множество вложенных условий.
Оператор break
Оператор break имеет два назначения. Первое - это окончание работы оператора switch. Второе - это принудительное окончание цикла, минуя стандартную проверку условия. Данное назначение здесь и рассматривается. Когда оператор break встречается в теле цикла, цикл немедленно заканчивается и выполнение программы переходит на строку, следующую за циклом. Например:
#include <stdio.h>
int main(void)
{
int t;
for(t=0; t<100; t++)
{
printf ("%d ", t) ;
if (t==10) break;
}
return 0;
}
Данная программа выводит числа от 0 до 10 включительно и заканчивает работу, поскольку break вызывает немедленный выход из цикла, минуя условие t< 100.
Оператор break, как правило, используется в циклах, где особые условия могут вызвать немедленное завершение работы. Ниже приведен пример того, как нажатие на клавишу может остановить выполнение функции look_up():
int look_up(char *name)
{
char tname[40];
int loc;
loc = -1;
do
{
loc = read_next_name(tname);
if(kbhit ()) break;
}
while(!strcmp(tname, name));
return loc;
}
Можно использовать функции такого типа для поиска имени в файле базы данных. Если файл слишком длинный и надоело ждать, то можно нажать на клавишу и выйти из функции до окончания работы. Функция kbhit() возвращает 0, если не было нажатия. В противоположном случае она возвращает ненулевое значение, break вызывает выход из самого внутреннего цикла. Например:
for(t=0; t<100; ++t)
{
count = 1;
for(;;) {
printf ("%d ", count);
count++;
if (count == 10) break;
}
}
выводит числа от 1 до 10 включительно 100 раз. Каждый раз, когда встречается break, контроль передается внешнему циклу for.
break, используемый в операторе switch, влияет только на данный switch, но не на цикл, в котором может находиться switch.
continue;
Обычно оператор continue используется, если данные, обрабатываемые в теле цикла неверны, выходят за допустимые пределы или имеют непредвиденные значения. Вместо обработки некорректных данных, вы можете захотеть вернуться к началу цикла, чтобы получить другое значение
Пример.
// Вычисление средней зарплаты, зарплаты меньше 500 не учитываются
#include < iostream.h >
main()
{
float sr_zarp=0,zarp; // средняя заработная плата, текущая заработная плата
int kol=0; // количество
do
{
cout<<"Введите зарплату \n";
cout<<"(для окончания введите значение -1) :\n";
cin>> zarp;
if ( zarp<0 )
break;
if ( zarp<500 )
continue;
else
{
sr_zarp+=zarp;
kol++;
}
while (1= =1); // Бесконечный цикл
s_zarp/=floa_kol;
cout <<"Средняя зарплата=" << sr_zarp;
}