switch…case trong C (Câu lệnh Switch trong C) với các ví dụ
Câu lệnh chuyển đổi trong C là gì?
Câu lệnh chuyển đổi trong C kiểm tra giá trị của một biến và so sánh nó với nhiều trường hợp. Khi tìm thấy trường hợp khớp, một khối lệnh liên quan đến trường hợp cụ thể đó sẽ được thực thi.
Mỗi trường hợp trong một khối của switch có một tên/số khác nhau được gọi là mã định danh. Giá trị do người dùng cung cấp được so sánh với tất cả các trường hợp bên trong khối chuyển đổi cho đến khi tìm thấy kết quả khớp.
Nếu KHÔNG tìm thấy trường hợp khớp thì câu lệnh mặc định sẽ được thực thi và điều khiển sẽ thoát ra khỏi khối chuyển đổi.
Cú pháp chuyển đổi trường hợp
Cú pháp chung về cách triển khai switch-case trong chương trình 'C' như sau:
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;
- Biểu thức có thể là biểu thức số nguyên hoặc biểu thức ký tự.
- Giá trị-1, 2, n là các nhãn trường hợp được sử dụng để xác định từng trường hợp riêng lẻ. Hãy nhớ rằng nhãn chữ không được giống nhau vì nó có thể gây ra sự cố khi thực hiện chương trình. Giả sử chúng ta có hai trường hợp có cùng nhãn là '1'. Sau đó, trong khi thực thi chương trình, trường hợp xuất hiện đầu tiên sẽ được thực thi mặc dù bạn muốn chương trình thực thi trường hợp thứ hai. Điều này tạo ra các vấn đề trong chương trình và không mang lại kết quả như mong muốn.
- Nhãn hộp luôn kết thúc bằng dấu hai chấm ( : ). Mỗi trường hợp này được liên kết với một khối.
- Một khối không là gì ngoài nhiều câu lệnh được nhóm lại cho một trường hợp cụ thể.
- Bất cứ khi nào switch được thực thi, giá trị của biểu thức kiểm tra sẽ được so sánh với tất cả các trường hợp mà chúng ta đã xác định bên trong switch. Giả sử biểu thức kiểm tra chứa giá trị 4. Giá trị này được so sánh với tất cả các trường hợp cho đến trường hợp có nhãn bốn được tìm thấy trong chương trình. Ngay sau khi tìm thấy một trường hợp, khối câu lệnh liên quan đến trường hợp cụ thể đó sẽ được thực thi và quyền điều khiển sẽ thoát khỏi công tắc.
- Từ khóa break trong mỗi trường hợp cho biết sự kết thúc của một trường hợp cụ thể. Nếu chúng ta không đặt dấu ngắt trong từng trường hợp thì ngay cả khi trường hợp cụ thể được thực thi, switch trong C sẽ tiếp tục thực thi tất cả các trường hợp cho đến khi kết thúc. Điều này không nên xảy ra; do đó chúng ta luôn phải đặt từ khóa break trong từng trường hợp. Break sẽ chấm dứt trường hợp sau khi nó được thực thi và điều khiển sẽ rơi ra khỏi switch.
- Trường hợp mặc định là trường hợp tùy chọn. Bất cứ khi nào giá trị của test-expression không khớp với bất kỳ trường hợp nào bên trong switch, thì default sẽ được thực thi. Nếu không, không cần phải viết default trong switch.
- Khi công tắc được thực thi, điều khiển sẽ chuyển đến câu lệnh-x và quá trình thực thi chương trình sẽ tiếp tục.
Lưu đồ câu lệnh chuyển đổi
Sơ đồ sau minh họa cách chọn trường hợp trong trường hợp chuyển đổi:

Ví dụ về trường hợp chuyển đổi trong C
Chương trình sau minh họa cách sử dụng công tắ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;
}
Đầu ra:
Value is 8
- Trong chương trình đã cho, chúng tôi đã giải thích việc khởi tạo một biến số có giá trị 8.
- Cấu trúc switch được sử dụng để so sánh giá trị được lưu trữ trong biến num và thực thi khối câu lệnh liên quan đến trường hợp khớp.
- Trong chương trình này, vì giá trị được lưu trong biến num là 8 nên switch sẽ thực thi trường hợp có nhãn case là XNUMX. Sau khi thực hiện trường hợp đó, điều khiển sẽ thoát khỏi switch và chương trình sẽ kết thúc với kết quả thành công bởi in giá trị trên màn hình đầu ra.
Hãy thử thay đổi giá trị của biến num và nhận thấy sự thay đổi ở đầu ra.
Ví dụ, chúng ta xem xét chương trình sau đây có giá trị mặc định:
#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");}}
Đầu ra:
Other programming language
Khi làm việc với trường hợp switch trong C, bạn nhóm nhiều trường hợp bằng các nhãn duy nhất. Bạn cần đưa câu lệnh break trong mỗi trường hợp vào nhánh ở cuối câu lệnh switch.
Trường hợp mặc định tùy chọn sẽ chạy khi không có kết quả khớp nào khác được thực hiện.
Chúng ta hãy xem xét câu lệnh chuyển đổi sau:
#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");}}
Đầu ra:
Four, Five, or Six.
Công tắc lồng nhau trong C
In C, chúng ta có thể có một công tắc bên trong được nhúng vào một công tắc bên ngoài. Ngoài ra, các hằng số trường hợp của công tắc bên trong và bên ngoài có thể có các giá trị chung và không có bất kỳ xung đột nào.
Chúng ta xem xét chương trình sau đây trong đó người dùng nhập ID của mình, nếu ID hợp lệ thì chương trình sẽ yêu cầu người dùng nhập mật khẩu, nếu mật khẩu đúng thì chương trình sẽ in tên người dùng, nếu không, chương trình sẽ in Mật khẩu không đúng và nếu ID không tồn tại, chương trình sẽ in ID không đúng.
#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;
}
}
Đầu ra:
Plese Enter Your ID: 500 Enter your password: 000 Welcome Dear Programmer
- Trong chương trình đã cho, chúng tôi đã giải thích hai biến khởi tạo: ID và mật khẩu
- Cấu trúc switch bên ngoài được sử dụng để so sánh giá trị được nhập vào biến ID. Nó thực thi khối câu lệnh liên quan đến trường hợp trùng khớp (khi ID==500).
- Nếu câu lệnh khối được thực thi với trường hợp khớp, một công tắc bên trong sẽ được sử dụng để so sánh các giá trị được nhập trong biến mật khẩu và thực thi các câu lệnh được liên kết với trường hợp khớp (khi mật khẩu==000).
- Nếu không, trường hợp chuyển đổi sẽ kích hoạt trường hợp mặc định và in văn bản phù hợp liên quan đến phác thảo chương trình.
Tại sao chúng ta cần vỏ Switch?
Có một vấn đề tiềm ẩn với câu lệnh if-else đó là độ phức tạp của chương trình tăng lên bất cứ khi nào số lượng đường dẫn thay thế tăng lên. Nếu bạn sử dụng nhiều cấu trúc if-else trong chương trình, chương trình có thể trở nên khó đọc và khó hiểu. Đôi khi nó thậm chí có thể gây nhầm lẫn cho chính nhà phát triển đã viết chương trình.
Giải pháp cho vấn đề này là câu lệnh switch.
Quy tắc cho câu lệnh switch
- Một biểu thức phải luôn thực thi để có kết quả.
- Nhãn trường hợp phải là hằng số và duy nhất.
- Nhãn trường hợp phải kết thúc bằng dấu hai chấm ( : ).
- Từ khóa break phải có mặt trong mỗi trường hợp.
- Chỉ có thể có một nhãn mặc định.
- Chúng ta có thể lồng nhiều câu lệnh switch.
Tổng kết
- Công tắc là một cấu trúc ra quyết định trong 'C".
- Switch được sử dụng trong một chương trình có liên quan đến nhiều quyết định.
- Một switch phải chứa một biểu thức kiểm tra có thể thực thi được.
- Mỗi trường hợp phải bao gồm một từ khóa break.
- Nhãn trường hợp phải là hằng số và duy nhất.
- Mặc định là tùy chọn.
- Nhiều câu lệnh switch có thể được lồng vào nhau.


