switch…case в C (изявление Switch в C) с примери
⚡ Умно обобщение
Операторът Switch в C сравнява един израз с множество етикети за регистри (case) и изпълнява съответстващия блок, предлагайки по-чиста алтернатива на дългите if-else вериги, когато програмата трябва да избира измежду много фиксирани целочислени или символни стойности.

Какво е Switch Statement в C?
Операторът Switch в C проверява стойността на променлива и я сравнява с множество случаи. След като се намери съвпадение на случая, се изпълнява блок от оператори, свързани с този конкретен случай.
Всеки случай в блок на превключвател има различно име/номер, който се нарича идентификатор. Стойността, предоставена от потребителя, се сравнява с всички случаи в блока за превключване, докато се намери съвпадението.
Ако съвпадение на регистър НЕ бъде намерено, тогава операторът по подразбиране се изпълнява и контролата излиза от блока за превключване.
Синтаксис за превключване на главни и малки букви
Общият синтаксис за това как превключването на регистъра се изпълнява в програма на "C" е както следва:
switch( expression ) { case value-1: Block-1; Break; case value-2: Block-2; Break; case value-n: Block-n; Break; default: Block-1; Break; } Statement-x;
- Изразът може да бъде цяло число или символен израз.
- Стойност-1, 2, n са етикети на случай, които се използват за идентифициране на всеки случай поотделно. Не забравяйте, че етикетите на case не трябва да са еднакви, тъй като това може да създаде проблем при изпълнение на програма. Да предположим, че имаме два случая със същия етикет като '1'. След това, докато изпълнявате програмата, случаят, който се появява първи, ще бъде изпълнен, въпреки че искате програмата да изпълни втори случай. Това създава проблеми в програмата и не предоставя желания резултат.
- Етикетите за регистър винаги завършват с двоеточие ( : ). Всеки от тези случаи е свързан с блок.
- Един блок не е нищо друго освен множество изрази, които са групирани за конкретен случай.
- Всеки път, когато превключвателят се изпълнява, стойността на тестовия израз се сравнява с всички случаи, които сме дефинирали в превключвателя. Да предположим, че тестовият израз съдържа стойност 4. Тази стойност се сравнява с всички случаи до случай, чийто етикет четири бъде намерен в програмата. Веднага щом бъде открит случай, блокът от инструкции, свързани с този конкретен случай, се изпълнява и контролът излиза от превключвателя.
- Ключовата дума break във всеки случай показва края на конкретен случай. Ако не поставим прекъсването във всеки случай, тогава въпреки че конкретният случай е изпълнен, превключвателят в C ще продължи да изпълнява всички случаи, докато не бъде достигнат краят. Това не трябва да се случва; следователно винаги трябва да поставяме ключова дума break във всеки случай. Break ще прекрати случая, след като бъде изпълнен и контролът ще изпадне от превключвателя.
- Случаят по подразбиране е незадължителен. Всеки път, когато стойността на тестовия израз не съответства на нито един от случаите вътре в превключвателя, тогава ще бъде изпълнена стойността по подразбиране. В противен случай не е необходимо да пишете default в превключвателя.
- След като превключвателят бъде изпълнен, контролът ще премине към израза-x и изпълнението на програма ще продължи.
Блок-схема на изявление за превключване
Следващата диаграма илюстрира как се избира кутия в случай на превключване:
Как работи Switch
Пример за превключване на случай в C
Следната програма илюстрира използването на switch:
#include <stdio.h> int main() { int num = 8; switch (num) { case 7: printf("Value is 7"); break; case 8: printf("Value is 8"); break; case 9: printf("Value is 9"); break; default: printf("Out of range"); break; } return 0; }
Изход:
Value is 8
- В дадената програма сме инициализирали променлив число със стойност 8.
- Конструкция превключвател се използва за сравняване на стойността, съхранена в променлива num и изпълнение на блока от изрази, асоцииран със съвпадащия регистър.
- В тази програма, тъй като стойността, съхранена в променлива num, е осем, превключвател ще изпълни случая, чийто етикет на случай е 8. След изпълнение на случая контролът ще изпадне от превключвателя и програмата ще бъде прекратена с успешен резултат от отпечатване на стойността на изходния екран.
Опитайте да промените стойността на променливата num и забележете промяната в изхода.
Например, ние разглеждаме следната програма, която е по подразбиране:
#include <stdio.h> int main() { int language = 10; switch (language) { case 1: printf("C#\n"); break; case 2: printf("C\n"); break; case 3: printf("C++\n"); break; default: printf("Other programming language\n");}}
Изход:
Other programming language
Когато работите с превключване на регистър в C, вие групирате няколко случая с уникални етикети. Трябва да въведете оператор break във всеки случай, за да се разклоните в края на оператор switch.
Незадължителният случай по подразбиране се изпълнява, когато няма други съвпадения.
Разглеждаме следното изявление за превключване:
#include <stdio.h> int main() { int number=5; switch (number) { case 1: case 2: case 3: printf("One, Two, or Three.\n"); break; case 4: case 5: case 6: printf("Four, Five, or Six.\n"); break; default: printf("Greater than Six.\n");}}
Изход:
Four, Five, or Six.
Вложен превключвател в C
In C, можем да имаме вътрешен превключвател, вграден във външен превключвател. Също така константите на регистъра на вътрешния и външния превключвател може да имат общи стойности и без никакви конфликти.
Разглеждаме следната програма, която иска от потребителя да въведе собствения си идентификатор. Ако идентификаторът е валиден, ще го помоли да въведе паролата си; ако паролата е правилна, програмата ще изведе името на потребителя, в противен случай ще изведе „Неправилна парола“; а ако идентификаторът не съществува, програмата ще изведе „Неправилен идентификатор“.
#include <stdio.h> int main() { int ID = 500; int password = 000; printf("Plese Enter Your ID:\n "); scanf("%d", & ID); switch (ID) { case 500: printf("Enter your password:\n "); scanf("%d", & password); switch (password) { case 000: printf("Welcome Dear Programmer\n"); break; default: printf("incorrect password"); break; } break; default: printf("incorrect ID"); break; } }
Изход:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- В дадената програма сме инициализирали две променливи: ID и password.
- Външна конструкция switch се използва за сравняване на стойността, въведена в променлива ID. Тя изпълнява блока от оператори, свързани със съвпадащия случай (когато ID==500).
- Ако блоковият оператор се изпълни със съвпадащия регистър, се използва вътрешен switch за сравняване на стойностите, въведени в променливата password, и за изпълнение на операторите, свързани със съвпадащия регистър (когато password==000).
- В противен случай превключването на регистър ще задейства регистъра по подразбиране и ще отпечата подходящия текст относно очертанията на програмата.
Защо се нуждаем от кутия Switch?
Има един потенциален проблем с оператор if-else което означава, че сложността на програмата се увеличава, когато броят на алтернативните пътища се увеличава. Ако използвате няколко конструкции if-else в програмата, програмата може да стане трудна за четене и разбиране. Понякога дори може да обърка разработчика, който сам е написал програмата.
Решението на този проблем е командата switch.
Правила за изявление за превключване
Следвайте тези правила, когато пишете switch на C:
- Един израз винаги трябва да се изпълнява до резултат.
- Етикетите на случай трябва да бъдат постоянни и уникални.
- Етикетите за регистър трябва да завършват с двоеточие ( : ).
- Във всеки случай трябва да присъства ключова дума break.
- Може да има само един етикет по подразбиране.
- Можем да вложим множество изрази за превключване.



