Оптимизация примера

# include <iostream> using namespace std; void main(){ // объявление переменных и ввод значения с клавиатуры float A,B,RES; cout<<"Enter first digit:\n"; cin>>A; cout<<"Enter second digit:\n"; cin>>B; // реализация программного меню char key; cout<<"\nSelect operator:\n"; cout<<"\n + - if you want to see SUM.\n"; cout<<"\n - - if you want to see DIFFERENCE.\n"; cout<<"\n * - if you want to see PRODUCT.\n"; cout<<"\n / - if you want to see QUOTIENT.\n"; //ожидание выбора пользователя cin>>key; //проверяется значение переменной key switch(key){ case '+': // если пользователь выбрал сложение RES=A+B; cout<<"\nAnswer: "<<RES<<"\n"; break; // остановка switch case '-': // если пользователь выбрал вычитание RES=A-B; cout<<"\nAnswer: "<<RES<<"\n"; break; // остановка switch case '*': // если пользователь выбрал умножение RES=A*B; cout<<"\nAnswer: "<<RES<<"\n"; break; // остановка switch case '/': // если пользователь выбрал деление if(B){ // если делитель не равен нулю RES=A-B; cout<<"\nAnswer: "<<RES<<"\n"; } else{ // если делитель равен нулю cout<<"\nError!!! Divide by null!!!!\n"; } break; // остановка switch default: // если введенный символ некорректен cout<<"\nError!!! This operator isn't correct\n"; break; // остановка switch } }

Как видите, код теперь выглядит гораздо проще и его удобнее читать.

Оператор switch достаточно прост в обращении, однако необходимо знать некоторые особенности его работы:

1. Если в case используются символьные значения, они должны указываться в одинарных кавычках, если целочисленные, то без кавычек.

2. Оператор default может располагаться в любом месте системы switch, выполняться он все равно будет в том случае, если нет ни одного совпадения. Однако правилом "хорошего тона" является указывать default в конце всей конструкции.

switch(выражение){ case значение1: действие1; break; case значение2: действие2; break; default: действие_по_умолчанию; break; case значение3: действие3; break; }

3. После самого последнего оператора в списке (будь то case или default) оператор break можно не указывать.

switch(выражение){ case значение1: действие1; break; case значение2: действие2; break; default: действие_по_умолчанию; break; case значение3: действие3; }
switch(выражение){ case значение1: действие1; break; case значение2: действие2; break; case значение3: действие3; break; default: действие_по_умолчанию; }

4. Оператор default можно вообще не указывать, в случае, если не найдется совпадений, просто ничего не произойдет.

switch(выражение){ case значение1: действие1; break; case значение2: действие2; break; case значение3: действие3; break; }

5. В случае, если необходимо выполнять один и тот же набор действий для разных значений проверяемого выражения, можно записывать несколько меток подряд. Рассмотрим пример программы, которая переводит систему буквенных оценок в цифровые.

# include <iostream> using namespace std; void main(){ // объявление переменной, для хранения буквенной оценки char cRate; // просьба ввести буквенную оценку cout<<"Input your char-rate\n"; cin>>cRate; //анализ введенного значения switch (cRate) { case 'A': case 'a': // оценка A или a равноценна 5 cout<<"Your rate is 5\n"; break; case 'B': case 'b': // оценка B или b равноценна 4 cout<<"Your rate is 4\n"; break; case 'C': case 'c': // оценка C или c равноценна 3 cout<<"Your rate is 3\n"; break; case 'D': case 'd': // оценка D или d равноценна 2 cout<<"Your rate is 2\n"; break; default: // остальные символы некорректны cout<<"This rate isn't correct\n"; } }

Пример примечателен тем, что с помощью идущих подряд case достигается регистронезависимость. То есть, неважно, какую именно букву введет пользователь - заглавную или строчную.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: