Оператор-переключатель 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;
}