Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие2013_09_28.doc
Скачиваний:
29
Добавлен:
20.05.2015
Размер:
2.72 Mб
Скачать

Оператор - переключатель

Оператор - переключатель switch языка С/С++ имеет следующий вид:

switch (выражение)

{

case константа­_1 : [блок_операторов_1] [break;]

case константа­_2 : [блок_операторов_2] [break;]

...

case константа_N : [блок_операторов_N] [break;]

[default : блок_операторов_N+1]

}

Выполнение оператора начинается с вычисления значения выражения, стоящего в скобках после ключевого слова switch. Тип значения выражения должен принадлежать к одному из целых типов (в частности, может быть и символьного типа ). Эта величина и используется в качестве критерия для выбора вариантов. Вычисленное значение последовательно сравнивается со значениями констант (в общем случае – константных выражений) константа_1, константа_2, …, константа_N, которые обязаны быть того же типа, что и тестируемое выражение. Никакие две константы в одном операторе–переключателе не могут иметь одинаковые значения. При совпадении значения выражения с константой_i выполняется блок_операторов_i. Затем управление передаётся на оператор, следующий сразу после оператора-переключателя, если в i-й ветви присутствует оператор break. В противном случае выполняются операторы в ветвях i+1, i+2 и т. д. до тех пор, пока в них не встретится оператор break или не будет достигнут и выполнен блок_операторов_N+1 из ветви default.

Если значение выражения не совпало ни с одной из констант константа_1, константа_2, …, константа_N, то выполняется блок_операторов_N+1, помеченный меткой default. При её отсутствии в сложившейся ситуации выполняется оператор, следующий сразу после оператора-переключателя .

Замечание. В теле оператора switch может встретиться оператор return, который в этом случае прекращает работу оператора-переключателя и завершает работу всей функции.

Снова напишем программу, реализующую простейший калькулятор, но применим теперь в ней оператор switch.

// Калькулятор в Visual Studio 2008 3.03.2008г

#include "stdafx.h"

#include<conio.h>

#include <iostream>

using namespace std;

int main()

{

char znak;

float a, b, y;

//Устанавливаем локализацию для выходного потока

wcout.imbue(locale("rus_rus.866"));

wcout<<L"Введи арифметическое выражение типа 25*4 "<<endl;

cin>>a>>znak>>b;

switch(znak)

{

case '+': y=a+b; wcout<<L"сумма "; break;

case '-': y=a-b; wcout<<L"разность ";break;

case '*': y=a*b; wcout<<L"произведение ";break;

case '/': if (b)

{ y=a/b; wcout<<L"частное ";break; }

else

{ wcout << L"Деление на 0 " ;

_getch(); return 2;

}

default: wcout<<L"Это плохой знак!\n ";

_getch(); return 1;

}

wcout<<a<<znak<<b<<" = "<<y<<endl;

_getch(); return 0;

}

Обратите внимание, что некоторые блоки_операторов согласно синтаксису оператораswitch могут отсутствовать. Это позволяет связывать одну последовательность операторов с несколькими case-метками.

Пример.

cout << "Разрешите запуск ракеты (y/n)? "<<endl;

char ch = getch();

switch (ch)

{

case 'n' : case 'N' : case 'т' : case 'Т' :

cout << "Нельзя " <<endl; break;

case 'y' : case 'Y' : case 'н' : case 'Н' :

cout << "Можно " <<endl; break;

default :cout << "Смотреть надо, когда жмешь клавишу !" ;

}