switch…case в C (інструкція Switch в C) із прикладами
⚡ Розумний підсумок
Оператор switch у C порівнює один вираз з кількома мітками case та запускає відповідний блок, пропонуючи чистішу альтернативу довгим ланцюжкам if-else, коли програма повинна вибирати серед багатьох фіксованих цілочисельних або символьних значень.

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



