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-case là một cấu trúc điều khiển và rẽ nhánh hoàn toàn có thể thay thế được if-else.
Việc sử dụng switch-case sẽ giúp code của chúng ta dễ viết và dễ đọc hơn.
Sử dụng switch-case sẽ cho hiệu năng tốt hơn so với sử dụng if-else.
switch sẽ so sánh giá trị của expression với mỗi case (trường hợp) bên trong nó.
Từ khóa break được sử dụng để kết thúc một case trong câu lệnh switch.
Case default sẽ được thực hiện nếu không có case nào khớp giá trị với expression. Trong khối lệnh switch có thể có một case default hoặ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.
expression phả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 break có 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á break hoặc dấu } cuối cùng của cấu trúc switch-case.
Cho phép switch-case lồ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
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.