Правила использование break
Наиболее часто на практике применяется вариант оператора switch,каждая из веток которого должна заканчивается его завершением, т.е. оператором break.
// Пример 7.2.5
// Использование оператора switch : параметр выбора - целое
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned short number;
double kursG=1, kursD=4.9, kursE=7.6,kursR=0.19, kurs;
cout << "Введите номер валюты (1-гривна, 2-доллар, 3-евро, 4-рубль) : ";
cin >> number;
switch (number) {
case 1 : cout << "Гривна! "; kurs=kursG; break;
case 2 : cout << "Доллар! "; kurs=kursD; break;
case 3 : cout << "Евро! "; kurs=kursE; break;
case 4 : cout << "Рубль! "; kurs=kursR; break;
default : cout << "Неправильно выбран номер!\n"; return;
}
cout << "Для вычисления выбран курс = " << kurs << endl;
cin.get();cin.get();
}
// Пример 7.2.6
// Использование оператора switch : параметр выбора - перечисление
#include <iostream>
using namespace std;
enum Valuta {Grivna=1, Dollar, Evro, Rubl};
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned short number;
double kursG=1, kursD=4.9, kursE=7.6,kursR=0.16, kurs;
cout << "Введите номер валюты (1-гривна, 2-доллар, 3-евро, 4-рубль) : ";
cin >> number;
switch (number) {
case Grivna : cout << "Гривна! "; kurs=kursG; break;
case Dollar : cout << "Доллар! "; kurs=kursD; break;
case Evro : cout << "Евро! "; kurs=kursE; break;
case Rubl : cout << "Рубль! "; kurs=kursR; break;
default : cout << "Неправильно выбран номер!\n"; return;
}
cout << "Для вычисления выбран курс = " << kurs << endl;
cin.get(); cin.get();
}
3. Ограничение возможностей оператора switch
И оператор switch, и оператор if-else позволяют программе осуществить выбор из списка взаимоисключающих вариантов. Оператор if-else более гибок и может обрабатывать диапазоны и вещественные числа. Оператор switchне предназначен для обработки диапазонов, т.к. метка варианта case оператора switchне может быть вещественным значением.
// Пример 7.2.7
// Использование оператора switch недопустимо для анализа диапазонов
// Нужно использовать if-else
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned short int age,index;
cout << "Введите возраст от 17 до 65: ";
cin >> age;
if (age >=17 && age < 35)
index=0;
else if (age >=35 && age < 50)
index=1;
else if (age >=50 && age < 65)
index=2;
else
index=3;
cout << "Индекс возраста = " << index << endl;
cin.get();cin.get();
}
4. Сравнение операторов switch и if-else
Использование switch упрощает запись сложных, многоуровневых операторов if-else,
варианты которых могут быть определены целыми величинами, перечислениями или символами. Оператор switch был разработан для обработки именно таких ситуаций. Его использование более эффективно как с точки зрения размера программы так и времени ее выполнения. Если можно использовать как if-else, так и switch, то оператор switchследует использовать при наличии трех и более возможных вариантов.
// Пример 7.2.8
// Совместное использование операторов if-else и switch
#include <iostream>
using namespace std;
enum Level {Rebenok, Molodoy, Sredniy, Pogiloy, Stariy };
Level GetAgeIndex();
void Print(Level);
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
Level index;
index=GetAgeIndex();
Print(index);
cin.get();cin.get();
}
Level GetAgeIndex() {
unsigned short int age;
Level index;
cout << "Введите возраст от 17 до 65 : ";
cin >> age;
//Использование оператора switch недопустимо для анализа диапазонов
if (age < 17)
index=Rebenok;
else if (age >=17 && age < 35)
index=Molodoy;
else if (age >=35 && age < 50)
index=Sredniy;
else if (age >=50 && age < 65)
index=Pogiloy;
else
index=Stariy;
cout << "Индекс возраста = " << index << endl;
return index;
}
void Print(Level index) {
//Использование оператора switch рекомендуется для выбора
//одного из множества целых вариантов
switch (index) {
case Rebenok : cout << "Ребенок!\n"; break;
case Molodoy : cout << "Молодой!\n"; break;
case Sredniy : cout << "Средний!\n"; break;
case Pogiloy : cout << "Пожилой!\n"; break;
case Stariy : cout << "Старый!\n"; break;
}
}