Như được đưa ra trong câu hỏi, cả hai vòng lặp tương đương nhau. Tuy nhiên, trong mã thực tế, điều điển hình là mọi thứ phức tạp hơn một chút, và trong trường hợp đó, điều kiện "i < n" có xu hướng an toàn hơn một chút. Nếu, ví dụ, tôi có thể tăng nhiều hơn một, nó có thể đi qua n và sau đó phiên bản "i! = N" sẽ dẫn đến một vòng lặp vĩnh cửu.
Đây là trường hợp lập trình phòng thủ.Nó không được chấp nhận rộng rãi: một số người thích đảm bảo mọi thứ thất bại một cách ngoạn mục nhất có thể để các lỗi được tìm thấy sớm. Phong cách phòng thủ có thể che giấu những vấn đề nhỏ như thế. Tuy nhiên, nếu bạn muốn bắt tất cả các lỗi, bạn cũng có thể đi tất cả các cách:
int n = 5;
int i = 0;
while (i != n) {
int old_i = i;
// the real stuff of the loop here
++i;
assert(i == old_i + 1);
}
(Hoặc, thậm chí tốt hơn, sử dụng một langauge hỗ trợ synxtax để xác định trước và sau điều kiện và bất biến vòng lặp natively .)
Cuốn sách "Cạm bẫy và cạm bẫy" của Andrew Koenig (xem http://en.wikipedia.org/wiki/C_Traps_and_Pitfalls cho người mới bắt đầu) có lẽ thú vị với bạn nếu bạn muốn suy ngẫm về loại câu hỏi này.
Nguồn
2009-01-25 10:25:40
giảm giá mạnh! có vẻ như một câu hỏi hoàn toàn hợp pháp! –
Đây là ví dụ từ "Accelerated C++: lập trình thực tế bằng ví dụ/Andrew Koenig, Barbara E. Moo." Chỉ muốn biết tại sao Tác giả thích câu hỏi đầu tiên – yesraaj
@raj - Có thể đề cập đến trong câu hỏi của bạn nơi bạn tìm thấy sự cố và nói rằng bạn đang tìm kiếm giải thích về lý do tại sao người này lại tốt hơn người khác. Nó có thể ngăn chặn bỏ phiếu xuống nhanh. – Dana