2010-05-26 70 views
13

Về câu lệnh switch/case trong mã C++ bên dưới: "Case 1" rõ ràng là sai, vậy tại sao nó lại nhập vào vòng lặp do-while?Câu lệnh Switch/Case trong C++

#include <iostream> 

using namespace std; 

int main() { 

    int test = 4; 

    switch(test) { 
     case 1: do { 
      case 2: test++; 
      case 3: test++; 
      case 4: cout << "How did I get inside the do-while loop?" << endl; break; 
      case 5: test++; 
     } while(test > 0); 
     cout << test << endl; 
    } 
} 
+0

Tôi không thấy 'trường hợp 7' trong ví dụ của bạn –

+0

typo nhẹ, tôi đã thay đổi 7 -> 1 – user320723

Trả lời

18

Đây là Duff's Device, mà là một kỹ thuật cũ, thông minh để nhảy vào giữa vòng lặp.

+2

thông minh ...? Tôi nghĩ nó phụ thuộc nhiều hơn vào vụ án. Tôi sẽ không sử dụng nó nếu nó làm tổn hại đến khả năng đọc của mã. Bạn có thể cho tôi một ví dụ cụ thể hơn khi nó có thể được áp dụng không? – Phong

+1

@Phong: Những điều xấu xa vẫn có thể thông minh. –

+0

Thưa bạn, bạn dường như đã làm bài tập ở nhà của bạn! +1 từ tôi! –

0

tôi đã không kiểm tra nó, nhưng nhìn chung do/while nên được nhập như lâu bạn không có một "phá vỡ" tuyên bố thực hiện ...

0

Công tắc không đánh giá/hiểu mã nguồn. Nó chỉ là một lệnh vào đây để nhảy trực tiếp đến nhãn mã nguồn case 4

0

Lý do bạn đạt được do-while loop là vì:

Chuyển tuyên bố bắt đầu chế biến tại nhãn đầu tiên. Nếu nó không nhấn một lệnh break, nó sẽ tiếp tục đi qua từng nhãn liên tiếp cho đến khi nó chạm vào một nhãn (trong trường hợp nó thoát), hoặc nó đã đi qua từng nhãn và thực thi tất cả các mã bên trong, sau đó thoát ra.

Các vấn đề liên quan