Освой самостоятельно С++ за 21 день.
Шрифт:
2: // Использование оператора switch
3:
4: #include <iostream.h>
5:
6: int main
7: {
8: unsigned short int number;
9: cout << "Enter а number between 1 and 5: ";
10: cin >> number;
11: switch (number)
12: {
13: case 0: cout << "Too small, sorry!";
14: break;
15: case 5: cout << "Good job!\n"; // fall through
16: case 4: cout << "Nice Pick!\n"; // fall through
17: case 3: cout << "Excellent!\n"; // fall through
18: case 2: cout << "Masterful!\n"; // fall through
19: case 1: cout << "Incredible!\n";
20: break;
21: default: cout << "Too large!\n";
22: break;
23: }
24: cout << "\n\n";
25: return 0;
26: }
Результат:
Enter a number between 1 and 5: 3
Excellent!
Masterful!
Incredible!
Enter a number between 1 and 5: 8
Too large!
Анализ:
Таким образом, при вводе чисел от 1 до 5 на экран будет выводиться ряд сообщений. Если же вводится число, превышающее 5, выполняется строка 21 с оператором default, в которой выводится сообщение Too large!.
Обработка комманд менб с помощью оператора switch
Вернемся к теме циклов с оператором for(;;). Такие конструкции называют бесконечными циклами, поскольку, если выполнение такого цикла не прервать оператором break, он будет работать бесконечно. Циклы подобного типа удобно использовать для обработки команд меню (листинг 7.17). Пользователь выбирает одну из предложенных команд, затем выполняется определенное действие и осуществляется возврат в меню. Так продолжается до тех пор, пока пользователь не выберет команду выхода.
В бесконечных циклах не существует условия, при нарушении которого цикл прерывается. Поэтому выйти из такого цикла можно только посредством оператора break.
Листинг 7.17. Пример бесконечного цикла
1: //Листинг 7.17.
2: //Обработка диалога с пользователем
3: //посредством бесконечного цикла
4: #include <lostream,h>
5:
6: // прототипы функций
7: int menu;
8: void DoTaskOne;
9: void DoTaskMany(int);
10:
11: int main
12: {
13:
14: bool exit = false;
15: for (;;)
16: {
17: int choice = menu;
18: switch(choice)
19: {
20: case (1):
21: DoTaskOne;
22: break;
23: case (2):
24: DoTaskOne(2);
25: break;
26: case (3):
27: DoTaskOne(3);
28: break;
29: case (4):
30: continue;
31: break;
32: case (5):
33: exit=true;
34: break;
35: default :
36: cout << " Please select again!\n";
37: break;
38: } //
конец блока switch39:
40: if (exit)
41: break;
42: } // и так до бесконечности
43: return 0;
44: } // конец функции main
45:
46: int menu
47: {
48: int choice;
49:
50: cout << " **** Menu **** \n\n";
51: cout << "(1) Choice one\n";
52: cout << "(2) Choice two\n";
53: cout << "(3) Choice three\n";
54: cout << "(4) Redisplay menu.\n";
55: cout << "(5) Quit.\n\n";
56: cout << ": ";
57: cin >> choice;
58: return choice;
59: }
60:
61: void DoTaskOne
62: {
63: cout << "Task One!\n";
64: }
65:
66: void DoTaskMany(int which)
67: {
68: if (which == 2)
69: cout << "Task Two!\n";
70: else
71: cout << "Task Three!\n";
72: }
Результат:
**** Menu ****
(1) Choice one.
(2) Choice two.
(3) Choice three.
(4) Redisplay menu.
(5) Quit.
: 1
Task One!
**** Menu ****
(1) Choice one.
(2) Choice two.
(3) Choice three.
(4) Redisplay menu.
(5) Quit.
: 3
Task Three!
**** Menu ****
(1) Choice one.
(2) Choice two.
(3) Choice three.
(4) Redisplay menu.
(5) Quit.
: 5
Анализ: В данной программе используются многие средства программирования, рассмотренные на этом и предыдущих занятиях. Тут же вы найдете пример использования конструкции switch.
Работа бесконечного цикла начинается в строке 15. Функция menu обеспечивает вывод на экран команд меню и возвращает номер выбранной пользователем команды. Обработка введенного номера осуществляется в конструкции switch в строках 18—38.
При выборе первой команды управление передается следующему после строки case (1): оператору (строка 21). Далее, в строке 21, вызывается функция DoTaskOne, которая выводит на экран сообщение о выборе пользователя. После завершения работы функции осуществляется возврат в точку вызова и выполняется оператор break (строка 22). Оператор break прерывает работу блока switch и управление передается в строку 39. Далее, в строке 40, проверяется значение переменной exit. Если оно истинно, бесконечный цикл прерывается оператором break в строке 41. В противном случае выполняется следующая итерация цикла (строка 15).