Switch ( вираз )
{ [оголошення]
:
[ case константний-вираз1]: [ список-операторів1]
[ case константний-вираз2]: [ список-операторів2]
:
:
[ default: [ список операторів ]]
}
Вираз, наступний за ключовим словом switch в круглих дужках, може бути будь-яким виразом, допустимими в мові С++, значення якого повинне бути цілим. Значення цього виразу є ключовим для вибору з декількох варіантів.
Тіло оператора switch складається з декількох операторів, помічених ключовим словом case з подальшим константним-виразом.
Слід зазначити, що використовування цілого константного виразу є істотним недоліком, властивим розглянутому оператору.
Оскільки константний вираз обчислюється під час трансляції, він не може містити змінні або виклики функцій. Як константний вираз використовуються цілі або символьні константи. Всі константні вирази в операторі switch повинні бути унікальні. Окрім операторів, помічених ключовим словом case, можливо, але обов'язково один, фрагмент помічений ключовим словом default. Список операторів може бути порожнім, або містити один або більш операторів. Причому в операторі switch не вимагається укладати послідовність операторів у фігурні дужки. Відзначимо також, що в операторі switch можна використовувати свої локальні змінні, оголошення яких знаходяться перед першим ключовим словом case, проте в оголошеннях не повинна використовуватися ініціалізація. Схема виконання оператора switch наступна:
- обчислюється вираз в круглих дужках;
- обчислені значення послідовно порівнюються з константними виразами, наступними за ключовими словами case;
- якщо один з константних виразів співпадає із значенням виразу, то керування передається на оператор, помічений відповідним ключовим словом case;
- якщо жоден з константних виразів не рівно виразу, то керування передається на оператор, помічений ключовим словом default, а у разі його відсутності управління передається на наступний після switch оператор.
Приклад. Нехай населені пункти позначені номерами від 1 до 8. Вартість одного квитка cina до конкретного пункту k визначається так:
Скільки коштує m квитків до населеного пункту, номер k якого вводиться з клавіатури?
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
int k,m,cina;
begin: cout<<"Введiть номер населеного пункту (1..8) - "; cin>>k;
cout<<"Введiть кiлькiсть квиткiв - ";cin>>m;
switch (k)
{
case 1:cina = 22;break;
case 2: case 3: case 4: cina = 25;break;
case 5: case 6: cina = 30;break;
case 7: case 8: cina = 35;
default:
{
cout<<"Помилка при введеннi!"<<endl;
goto begin;
}
}
cout<<"Цiна "<<m<<" квиткiв до населеного пункту "<<k<<" рiвна "<<cina<<endl;
getch();
}
Всі оператори, між початковим оператором і кінцем тіла, виконуються незалежно від ключових слів, якщо тільки якийсь з операторів не передасть керування з тіла оператора switch. Таким чином, програміст повинен сам подбати про вихід з case, якщо це необхідно. Частіше за все для цього використовується оператор break.
Для того, щоб виконати одні і ті ж дії для різних значень виразу, можна помітити один і той же оператор декількома ключовими
словами case.
Приклад:
int i=2;
switch (i)
{
case 1: i += 2;
case 2: i *= 3;
case 0: i /= 2;
case 4: i -= 5;
default: ; }
Виконання оператора switch починається з оператора, поміченого case 2. Таким чином, змінна i набуває значення, рівне 6, далі виконується оператор, помічений ключовим словом case 0, а потім case 4, змінна i прийме значення 3 а потім значення -2. Оператор, помічений ключовим словом default, не змінює значення змінної.
Використовування оператора break дозволяє в необхідний момент перервати послідовність виконуваних операторів в тілі оператора switch, шляхом передачі управління оператору, наступному за switch.
Відзначимо, що в тілі оператора switch можна використовувати вкладені оператори switch, при цьому в ключових словах case можна використовувати однакові константні вирази.
Приклад:
:
switch (a)
{
case 1: b=c; break;
case 2:
switch (d)
{ case 0: f=s; break;
case 1: f=9; break;
case 2: f-=9; break;
}
case 3: b-=c; break;
:
}
Оператор break забезпечує припинення виконання самого внутрішнього з об'єднуючих його операторів switch, do, for, while. Після виконання оператора break керування передається оператору, наступному за перерваним.
Дата добавления: 2015-08-26; просмотров: 857;