logo search
Posobie_Cpp

Int dvalue;

cin>>dvalue;

switch(dvalue)

{

case 0: // если dvalue равно нулю, то

// ...выполним эту часть программы...

break; // выход из оператора switch

case 1: // если dvalue равно 1, то

// ...выполним эту часть программы...

break;

case 3: // если dvalue равно 3, то

// ...выполним эту часть программы...

break;

default: // во всех других случаях выполнить:

// ... эту часть программы...

}

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

char choise;

cin>>choise;

switch(choise)

{

case ’a’:

case ’A’: cout<< ” abort”;

break;

case ’r’:

case ’R’: cout<< ” report”;

break;

default: cout<< ” That’s not a choise”;

}

Поскольку за меткой casea’: отсутствует оператор break, выполнение программы продолжается со следующей строки, с оператора, который расположен сразу после caseA’:.

Последний оператор default указывает на отрезок кода, который исполняется во всех остальных случаях, когда значение не соответствует ни одному из значений метки. Оператор default не является обязательным.

Как видим, и оператор switch, и оператор if else позволяют осуществить выбор из списка альтернативных вариантов. Оператор if else более гибок, в частности он позволяет обрабатывать диапазоны значений.

if (age>17 && age<20)

code=0;

else if (age>=20 && age<35)

code=1;

else if (age>=35)

code=2;

else

code=3;

Оператор switch не предназначен для обработки диапазонов. Кроме того, значение метки должно быть константой, а вариант метки – целым (включая тип char), поэтому switch не будет обрабатывать вещественные числа. Однако, если возможно, используйте оператор switch, так как это более эффективно с точки зрения скорости выполнения и размера программы.