- from alpha to omega 4 Trả về giá trị của hàm (returning value from functions)
b. Câu lệnh switch
Khi phải đối mặt với nhiều hơn hai lựa chọn thì ta có thể dùng thang if-else-if như trên. Tuy nhiên C++ cung cấp một cách khác, trong một số trường hợp hiệu quả hơn, đó là lệnh switch. Cú pháp cho câu lệnh switch như sau.
C++ Code:
Lựa chọn code | Ẩn/Hiện code
case constant1: // các câu lệnh ở đây break; case constant2: // các câu lệnh ở đây break; case constant3: // các câu lệnh ở đây break; ... default: // các câu lệnh ở đây }
Biểu thức expression của switch phải có giá trị nguyên (có thể là char, integer hoặc bool). Hoạt động câu lệnh switch như sau: giá trị của expression sẽ được so sánh lần lượt với giá trị của các case (tức là các constant1, constant2, …). Nếu phát hiện ra trường hợp nào “khớp” thì những câu lệnh sau case đó được thực hiện. Chú ý rằng nếu như không có lệnh nào “ngắt” (ví dụ break; chẳng hạn) thì nó cứ thế chạy tuột đến cuối thậm chí những case sau đó không khớp. Các câu lệnh sau nhãn default sẽ được thực hiện nếu như chạy qua hết các case mà không có trường hợp nào khớp. Chúng ta sẽ xem xét hai chương trình sử dụng switch sau đây.
C++ Code:
Lựa chọn code | Ẩn/Hiện code
// version 1 – without break
#include <iostream>
using namespace std;
int main(){ int n;
cout << "Enter an integer in range 0-5: "; cin >>n;
switch(n){ case 0:
cout << "Zero" << endl; case 1:
cout << "One" << endl; case 2:
cout << "Two" << endl; case 3:
cout << "Three" << endl; case 4:
cout << "Four" << endl; case 5:
cout << "Five" << endl; default:
cout << "Invalid" << endl; }
return 0; }
Điều gì sẽ xảy ra khi bạn nhập vào số 3. Kết quả sẽ như sau: Trích dẫn:
Enter an integer in range 0-5: 3 Three
Four Five Invalid
Như mình đã nói ở trên, một khi đã khớp với một trường hợp nào đó thì “tất cả những câu lệnh phía sau case đó sẽ được thực thi”. Vì vậy ta cần phải có cái gì đó để “ngắt” tại những thời điểm phù hợp và giải pháp là sử dụng lệnh break. Hãy xem xét phiên bản thứ hai của chương trình trên.
C++ Code:
Lựa chọn code | Ẩn/Hiện code
#include <iostream>
using namespace std;
int main(){ int n;
cout << "Enter an integer in range 0-5: "; cin >>n;
switch(n){ case 0:
cout << "Zero" << endl; break;
case 1:
cout << "One" << endl; break;
case 2:
cout << "Two" << endl; break;
case 3:
break; case 4:
cout << "Four" << endl; break;
case 5:
cout << "Five" << endl; break;
default:
cout << "Invalid" << endl; }
return 0; }
Bằng cách sử dụng lệnh break; chương trình sẽ hoạt động theo ý muốn của chúng ta. Khi gặp lệnh break; chương trình sẽ nhảy ra khỏi lệnh switch mà không thực thi những câu lệnh còn lại trong khối.
Bây giờ ta sẽ so sánh một chút giữa lệnh if và switch:
• Lệnh switch chỉ có thể kiểm tra tính bằng nhau để ra quyết định (khớp giữa giá trị của expression với giá trị của case), còn if có thể sử dụng mọi toán tử quan hệ và logic.
• Biểu thức trong switch chỉ có thể nhận giá trị nguyên, còn biểu thức trong if có thể là bất kỳ kiểu hợp lệ nào, những giá trị khác 0 sẽ là true, bằng 0 sẽ là false.
• Dùng switch (nếu có thể) sẽ hiệu quả hơn if lồng nhau. Chương trình trông sẽ sáng sủa hơn, kể cả là if-else-if ladder.
Hết bài 9a
__________________
Vấn đề không phải là bước nhanh, mà là luôn luôn bước luôn bước
Đã được chỉnh sửa lần cuối bởi first_pace : 08-03-2011 lúc 03:22 PM.
#13