Lệnh switch case là lệnh rẽ nhánh cũng gần tương tự như if-else mà chúng ta đã được biết. Nghĩa là nó có nhiều điều kiện, chương trình chúng ta duyệt từng điều khiện từ trên xuống dưới, nếu thoả mãn điều kiện nào thì đoạn code bên trong điều kiện đó sẽ được thực thi. Hãy tìm hiểu kỹ cú pháp và các ví dụ hướng dẫn sử dụng lệnh này của Tekmonk ở dưới nhé.
switch-caselà một cấu trúc điều khiển và rẽ nhánh hoàn toàn có thể thay thế đượcif-else.- Việc sử dụng
switch-casesẽ giúp code của chúng ta dễ viết và dễ đọc hơn. - Sử dụng
switch-casesẽ cho hiệu năng tốt hơn so với sử dụngif-else.
Cú pháp của lệnh switch case
switch (expression) {
case constant1:
// statements 1
break;
case constant2:
// statements 2
break;
.
.
.
default:
// default statements
}
switchsẽ so sánh giá trị củaexpressionvới mỗicase (trường hợp)bên trong nó.- Từ khóa
breakđược sử dụng để kết thúc mộtcasetrong câu lệnhswitch. - Case
defaultsẽ được thực hiện nếu không cócasenào khớp giá trị vớiexpression. Trong khối lệnhswitchcó thể có một casedefaulthoặc không có. - Nếu có một case nào đó khớp giá trị với
expression, các khối lệnh tương ứng của case đó sẽ được thực hiện cho tới khi gặp từ khoábreak.
Lưu ý:
- Các giá trị của mỗi case phải cùng kiểu dữ liệu với giá trị của
expression. expressionphải bắt buộc là giá trị hằng, có thể là biểu thức nhưng kết quả cần là hằng số.- Giá trị của các case là một hằng số và các giá trị của các case phải khác nhau.
- Số lượng các case là không giới hạn nhưng chỉ có thể có duy nhất một
default. - Từ khóa
breakcó thể sử dụng hoặc không. Nếu không được sử dụng thì chương trình sẽ không kết thúc khi đã thực hiện hết khối lệnh của case đó. Thay vào đó, nó sẽ thực hiện tiếp các khối lệnh của case tiếp theo cho đến khi gặp từ khoábreakhoặc dấu}cuối cùng của cấu trúcswitch-case. - Cho phép
switch-caselồng nhau, tuy nhiên không khuyến khích vì nó làm cho chương trình chúng ta phức tạp và khó đọc hơn thôi.
Dưới đây là sơ đồ khối mô tả hoạt động của lệnh switch-case

Ví dụ minh họa:
#include <stdio.h>
int main() {
int day;
printf("Enter the day: ");
scanf("%d", &day);
switch (day) {
case 2:
printf("Monday");
break;
case 3:
printf("Tuesday");
break;
case 4:
printf("Wednesday");
break;
case 5:
printf("Thursday");
break;
case 6:
printf("Friday");
break;
case 7:
printf("Saturday");
break;
case 8:
printf("Sunday");
break;
default:
printf("Only enter 2 -> 8.");
}
}
Và đây là kết quả sau khi chạy chương trình:
Enter the day: 6 Friday
Nếu nhập một giá trị không có trong các case, case default sẽ được chạy:
Enter the day: 12 Only enter 2 -> 8.
Cùng xem thêm một ví dụ khác sử dụng kiểu char
#include <stdio.h>
int main () {
char grade;
printf("Enter grade: ");
scanf("%c", &grade);
switch(grade) {
case 'A':
printf("Excellent!\n");
break;
case 'B':
case 'C':
printf("Well done.\n");
break;
case 'D':
printf("You passed.\n");
break;
case 'F':
printf("Better try again.\n");
break;
default:
printf("Invalid grade.\n");
}
printf("Your grade is %c\n", grade);
}
Kết quả:
Enter grade: B Well done. Your grade is B
Ở ví dụ này case B chúng ta không dùng break; – vì vậy khi chọn B (không có break; chặn lại) nó sẽ chạy xuống thực hiện code trong case C và in ra Well done.. Có nghĩa là khi chọn B hay C đều cho ra một kết quả giống nhau.
Điều gì sẽ xảy ra nếu như chúng ta không có từ khóa break ở mỗi case
#include <stdio.h>
<strong>int</strong> main<strong>()</strong>
{
<strong>int</strong> i=2;
<strong>switch</strong> (i)
{
<strong>case</strong> 1:
printf("Case1 ");
<strong>case</strong> 2:
printf("Case2 ");
<strong>case</strong> 3:
printf("Case3 ");
<strong>case</strong> 4:
printf("Case4 ");
<strong>default</strong>:
printf("Default ");
}
<strong>return</strong> 0;
}
Kết quả:
Case2 Case3 Case4 Default
Chúng ta thấy rằng nếu không có từ khóa break ở cuối mỗi case thì chương trình sẽ chạy tiếp xuống các case ngay bên dưới dẫn đến chương trình có thể thực hiện sai mong muốn của người code.
Như vậy, các bạn đã hiểu rất rõ về cú pháp lệnh switch case và các trường hợp sử dụng của nó, chúc các bạn học code thành công.
