switch…case в C (інструкція Switch в C) із прикладами
Що таке оператор Switch у C?
Оператор Switch у C перевіряє значення змінної та порівнює його з кількома випадками. Коли знайдено відповідність регістру, виконується блок операторів, пов’язаних із цим регістром.
Кожен корпус у блоці комутатора має іншу назву/номер, який називається ідентифікатором. Значення, надане користувачем, порівнюється з усіма випадками всередині блоку перемикачів, доки не буде знайдено збіг.
Якщо відповідність регістру НЕ знайдено, тоді виконується оператор за замовчуванням, і керування виходить із блоку switch.
Синтаксис зміни регістру
Загальний синтаксис того, як реалізовано перемикання регістрів у програмі на 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 – це мітки регістру, які використовуються для ідентифікації кожного регістру окремо. Пам’ятайте, що мітки регістру не повинні бути однаковими, оскільки це може створити проблему під час виконання програми. Припустимо, що у нас є два випадки з однаковою міткою «1». Потім, під час виконання програми, регістр, який з’являється першим, буде виконано, навіть якщо ви хочете, щоб програма виконала другий регістр. Це створює проблеми в програмі та не забезпечує бажаного результату.
- Мітки регістру завжди закінчуються двокрапкою ( : ). Кожен із цих випадків пов’язаний з блоком.
- Блок — це не що інше, як кілька операторів, згрупованих для конкретного випадку.
- Щоразу, коли перемикач виконується, значення тестового виразу порівнюється з усіма випадками, які ми визначили всередині перемикача. Припустимо, тестовий вираз містить значення 4. Це значення порівнюється з усіма випадками до випадку, мітка якого чотири знайдено в програмі. Як тільки випадок знайдено, блок операторів, пов’язаний із цим конкретним випадком, виконується, і керування переходить із комутатора.
- Ключове слово break у кожному випадку вказує на кінець конкретного випадку. Якщо ми не поставимо перерву в кожному випадку, тоді, навіть якщо конкретний випадок буде виконано, перемикач у C продовжуватиме виконувати всі випадки, доки не буде досягнуто кінця. Цього не повинно статися; отже, ми завжди повинні вставляти ключове слово break у кожному випадку. Break припинить інцидент після його виконання, і керування вийде з перемикача.
- Регістр за замовчуванням необов’язковий. Щоразу, коли значення тестового виразу не збігається з жодним із випадків всередині перемикача, тоді буде виконано значення за замовчуванням. В іншому випадку в перемикачі не потрібно писати default.
- Після того, як перемикач буде виконано, керування перейде до оператора x, і виконання програми продовжиться.
Блок-схема оператора Switch
Наступна схема ілюструє, як вибирається регістр у перемиканні регістрів:

Приклад зміни регістру в C
Наступна програма ілюструє використання перемикача:
#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
- У наведеній програмі ми пояснюємо ініціалізацію a змінна num зі значенням 8.
- Конструкція switch використовується для порівняння значення, що зберігається в змінній 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.
Необов’язковий випадок за замовчуванням виконується, коли не знайдено інших збігів.
Ми розглядаємо наступний оператор 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, ми можемо мати внутрішній перемикач, вбудований у зовнішній перемикач. Крім того, константи регістру внутрішнього та зовнішнього перемикачів можуть мати спільні значення та без будь-яких конфліктів.
Ми розглядаємо наступну програму, за допомогою якої користувач повинен ввести власний ідентифікатор, якщо ідентифікатор дійсний, він попросить його ввести свій пароль, якщо пароль правильний, програма надрукує ім’я користувача, інакше програма надрукує неправильне Пароль, і якщо ID не існує, програма надрукує Невірний ID
#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 і пароля
- Конструкція зовнішнього перемикача використовується для порівняння значення, введеного в ідентифікатор змінної. Він виконує блок операторів, пов’язаних із відповідним регістром (коли ID==500).
- Якщо оператор блоку виконується з відповідним регістром, внутрішній перемикач використовується для порівняння значень, введених у змінну пароль, і виконання операторів, пов’язаних із відповідним регістром (якщо пароль==000).
- В іншому випадку регістр перемикачів запустить регістр за замовчуванням і надрукує відповідний текст щодо структури програми.
Для чого нам потрібен кейс Switch?
Є одна потенційна проблема з оператор if-else тобто складність програми зростає щоразу, коли збільшується кількість альтернативних шляхів. Якщо ви використовуєте кілька конструкцій if-else у програмі, програму може стати важко читати та розуміти. Іноді це може навіть заплутати розробника, який сам написав програму.
Рішенням цієї проблеми є оператор switch.
Правила оператора перемикання
- Вираз повинен завжди виконуватися до результату.
- Мітки регістру мають бути постійними та унікальними.
- Мітки регістру мають закінчуватися двокрапкою ( : ).
- Ключове слово break має бути присутнім у кожному випадку.
- Може бути лише одна мітка за замовчуванням.
- Ми можемо вкладати кілька операторів switch.
Підсумки
- Перемикач - це конструкція прийняття рішень у "C».
- Перемикач використовується в програмі, де бере участь кілька рішень.
- Перемикач повинен містити виконуваний тестовий вираз.
- Кожен випадок повинен містити ключове слово break.
- Мітка регістру має бути постійною та унікальною.
- За замовчуванням необов'язковий.
- Кілька операторів switch можуть бути вкладені один в інший.