■ Инструкция switch отличается от инструкции if тем, что switch-выражение можно тестировать только с использованием условия равенства (т.е. на совпадение switch-выражения с заданными case-константами), в то время как условное if-выражение может быть любого типа.
■ Никакие две case-константы в одной switch-инструкции не могут иметь идентичных значений.
■ Инструкция switch обычно более эффективна, чем вложенные if-инструкции.
■ Последовательность инструкций, связанная с каждой case-ветвью, не является блоком. Однако полная switch-инструкция определяет блок. Значимость этого факта станет очевидной после того, как вы больше узнаете о C++.
Согласно стандарту C++ switch-конструкция может иметь не более 16 384 case-инструкций. Но на практике (исходя из соображений эффективности) обычно ограничиваются гораздо меньшим их количеством.
Использование switch-инструкции демонстрируется в следующей программе. Она создает простую "справочную" систему, которая описывает назначение for-, if- и switch-инструкций. После отображения списка предлагаемых тем, по которым возможно предоставление справки, программа переходит в режим ожидания до тех пор, пока пользователь не сделает свой выбор. Введенное пользователем значение используется в инструкции switch для отображения информация по указанной теме. (Вы могли бы в качестве упражнения дополнить информацию по имеющимся темам, а также ввести в эту "справочную" систему новые темы.)
// Демонстрация switch-инструкции на примере простой "справочной" системы.
#include
using namespace std;
int main()
{
int choice;
cout << "Справка по темам:\n\n";
cout << "1. for\n";
cout << "2. if\n";
cout << "3. switch\n\n";
cout << "Введите номер темы (1-3): ";
cin >> choice;
cout << "\n";
switch(choice) {
case 1:
cout << "for - это самый универсальный цикл в С++.\n";
break;
case 2:
cout << "if - это инструкция условного ветвления.\n";
break;
case 3:
cout <<"switch - это инструкция многонаправленного ветвления.\n";
break;
default:
cout << "Вы должны ввести число от 1 до З.\n";
}
return 0;
}
Вот один из вариантов выполнения этой программы.
Справка по темам:
1. for
2. if
3. switch
Введите номер темы (1-3) : 2
if - это инструкция условного ветвления.
Формально инструкция break необязательна, хотя в большинстве случаев использования switch-конструкций она присутствует. Инструкция break, стоящая в последовательности инструкций любой case-ветви, приводит к выходу из всей switch-конструкции и передает управление инструкции, расположенной сразу после нее. Но если инструкция break в case-ветви отсутствует, будут выполнены все инструкции, связанные с данной case-ветвью, а также все последующие инструкции, расположенные под ней, до тех пор, пока все-таки не встретится инструкция break, относящаяся к одной из последующих case-ветвей, или не будет достигнут конец switch-конструкции.
Рассмотрим внимательно следующую программу. Попробуйте предугадать, что будет отображено на экране при ее выполнении.
#include
using namespace std;
int main()
{
int i;
for(i=0; i<5; i++) {
switch(i) {
case 0: cout << "меньше 1\n";
case 1: cout << "меньше 2\n";
case 2: cout << "меньше 3\n";
case 3: cout << "меньше 4\n";
case 4: cout << "меньше 5\n";
}
cout << ' \n';
}
return 0;
}
Вот как выглядят результаты выполнения этой программы.
меньше 1
меньше 2
меньше 3
меньше 4
меньше 5
меньше 2
меньше 3
меньше 4
меньше 5
меньше 3
меньше 4
меньше 5
меньше 4
меньше 5
меньше 5
Как видно по результатам, если инструкция break в одной case-ветви отсутствует, выполняются инструкции, относящиеся к следующей case-ветви.
Как показано в следующем примере, в switch-конструкцию можно включать "пустые" case-ветви.
switch(i) {
case 1:
case 2:
case 3: do_something();
break;
case 4: do_something_else();
break;
}