Тук давам различни примери за конструкцията switch най-вече такива от контролните по теория на Павел Павлов по “Увод в програмирането“.
#include <iostream> using namespace std; int main () { int x = 0; while (x < 5) { switch (x * (x > -1) * (x < 4)) { case 1: cout << "A"; case 2: cout << "B"; case 3: cout << "C"; default: cout << "Not a number"; } cout << endl; x++; } system("pause"); return 0; }
Конструкцията switch в езика С++ има богати възможности да обърква студентите, а и не само тях. Тук можем да нямаме break-ове и така да изпълнява и ненужни неща. Също така можем да подредим default-а по различни начини, съчетано с липсата на прекъсвания се получават интересни резултати.
В тази програма има сложно условие за switch-а, като идеята е, ако отговаря на тези условия да влиза нормално в case-овете. Условията в скобките връщат винаги true или false, или техния еквивалент в цели числа – т.е. 1 или 0. Нещо умножено по 0 е 0, а нещо умножено по 1 си е самото нещо. Понеже нямаме break-ове изпълняваме всичко след като е влезнал в дадения case или default, така че позиционирането на конкретния случай наистина има значение.
#include <iostream> using namespace std; int main () { int x = 0; while (x < 5) { switch (x * (x > -1) * (x < 4)) { default: cout << "Not a number"; case 1: cout << "A"; case 2: cout << "B"; case 3: cout << "C"; } cout << endl; x++; } system("pause"); return 0; }
Разликата с по-горната е, че default-а е най-горе, но винаги първо проверява всички case-ове и чак тогава намира default-a и изпълнява всичко след него, поради липсата на break.
#include <iostream> using namespace std; int main () { int x = 0; while (x < 5) { switch (x * (x > -1) * (x < 4)) { case 1: cout << "A"; case 2: cout << "B"; default: cout << "Not a number"; break; case 3: cout << "C"; } cout << endl; x++; } system("pause"); return 0; }
В последния код, default-а е в м/у case-овете и има break. Изходният резултат е видим в изображението под кода.
Тази публикация е с цел да обърне внимание на липсата на break и различното подреждане на case и default, в един switch.