Câu lệnh switch cho phép ta đưa ra quyết định có nhiều
cách lựa chọn, nó kiểm tra giá trị của một biểu thức trên một danh sách các hằng
số nguyên hoặc kí tự. Khi nó tìm thấy một giá trị trong danh sách trùng với giá
trị của biểu thức điều kiện, các câu lệnh gắn với giá trị đó sẽ được thực hiện.
Cú pháp tổng quát của lệnh switch như sau:
switch (biểu_thức)
{ case hằng_1:
chuỗi_câu_lệnh;
break;
case hằng_2:
chuỗi_câu_lệnh;
break;
case hằng_3:
chuỗi_câu_lệnh;
break;
default:
chuỗi_câu_lệnh;
}
Ở đó, switch,
case và default là các từ khoá, chuỗi_câu_lệnh có thể là lệnh đơn
hoặc lệnh ghép và không cần đặt trong cặp dấu ngoặc. Biểu_thức theo sau từ khóa
switch phải được đặt trong dấu ngoặc ( ), và toàn bộ phần thân của
lệnh switch phải được đặt trong cặp ngoặc nhọn { }. Kiểu dữ liệu kết quả
của biểu_thức và kiểu dữ liệu của các hằng theo sau từ khoá case phải đồng nhất.
Chú ý, hằng số sau case chỉ có thể là một hằng số nguyên hoặc hằng
ký tự. Nó cũng có thể là các hằng biểu thức –
những biểu thức không chứa bất kỳ một
biến nào. Tất cả các giá trị của case phải khác nhau.
Trong câu lệnh switch, biểu thức được xác định giá
trị, giá trị của nó được so sánh với từng giá trị gắn với từng case theo thứ tự
đã chỉ ra. Nếu một giá trị trong một case trùng với giá trị của biểu thức, các
lệnh gắn với case đó sẽ được thực hiện. Lệnh break (sẽ nói ở phần sau) cho phép
thoát ra khỏi switch. Nếu không dùng lệnh break, các câu lệnh gắn với case bên
dưới sẽ được thực hiện không kể giá trị của nó có trùng với giá trị của biểu thức
điều kiện hay không. Chương trình cứ tiếp tục thực hiện như vậy cho đến khi gặp
một lệnh break. Chính vì thế, lệnh break được coi là lệnh quan trọng nhất khi
dùng switch.
Các câu lệnh gắn với default sẽ được thực hiện nếu
không có case nào thỏa mãn. Lệnh default là tùy chọn. Nếu không có lệnh default
và không có case nào thỏa mãn, không có hành động nào được thực hiện. Có thể
thay đổi thứ tự của case và default.
Ví dụ:
#include
<stdio.h>
int main
() {
char ch;
printf(“\nEnter a lower cased alphabet
(a - z): ”);
scanf(“%c”, &ch);
if (ch < ‘a’ || ch > ‘z’)
printf(“\nCharacter not a
lower cased alphabet”);
else
switch (ch){
case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’:
printf(“\nCharacter
is a vowel”);
break;
case ‘z’:
printf
(“\nLast Alphabet (z) was entered”);
break;
default:
printf(“\nCharacter
is a consonant”);
break;
}
}
Chương trình trên nhận vào một kí tự ở dạng chữ thường
và hiển thị thông báo kí tự đó là nguyên âm, là chữ z hay là một phụ âm. Nếu nó
không phải ba loại ở trên, chương trình hiển thị thông báo “Character not a
lower cased alphabet”.
Nên sử dụng lệnh break trong cả case cuối cùng hoặc
default mặc dù về mặt logic là không cần thiết. Nhưng điều đó rất có ích nếu
sau này chúng ta đưa thêm case vào cuố
Dưới
đây là một ví dụ, ở đó biểu thức của switch là một biến kiểu số nguyên
và giá trị của mỗi case là một số nguyên.
Ví dụ
/*
Integer constants as case labels */
#include
<stdio.h>
void
main() {
int basic;
printf(“\n Please enter your basic: ”);
scanf(“%d”, &basic);
switch (basic) {
case 200:
printf(“\n Bonus is
dollar %d\n”, 50);
break;
case 300:
printf(“\n Bonus is
dollar %d\n”, 125);
break;
case 400:
printf(“\n Bonus is
dollar %d\n”, 140);
break;
case 500:
printf(“\n Bonus is
dollar %d\n”, 175);
break;
default:
printf(“\n Invalid
entry”);
break;
}
}
Từ ví dụ trên, lệnh switch rất thuận lợi khi chúng
ta muốn kiểm tra một biểu thức dựa trên một danh sách giá trị riêng biệt. Nhưng
nó không thể dùng để kiểm tra một giá trị có nằm trong một miền nào đó hay
không. Ví dụ, không thể dùng switch để kiểm tra xem basic có nằm trong khoảng từ
200 đến 300 hay không, để từ đó xác định mức tiền thưởng. Trong những trường hợp
như vậy, ta phải sử dụng if-else.
إرسال تعليق