2011-10-04 54 views
9

Có cách nào cho phép thực hiện một khối mã xấu sau khi ngoại lệ bị ném không?C++, bỏ qua ngoại lệ và tiếp tục mã?

Hiện tại, mã của tôi có vòng lặp while chạy liên tục. Mã bên trong vòng lặp while này đôi khi ném một vectơ ra ngoài phạm vi lỗi. Tôi đã không thể theo dõi nguyên nhân của ngoại lệ đặc biệt này, nhưng cuối cùng, nó không quan trọng nhiều bởi vì mã bên trong vòng lặp while thực hiện cùng một điều lặp đi lặp lại và lần lặp tiếp theo không phụ thuộc vào lần lặp trước đó trong dù sao.

Điều này, sau khi mã trong vòng lặp while bị treo, tôi muốn nó bắt đầu lại từ đầu câu lệnh while.

Có cách nào để thực hiện việc này trong C++ không? try/catch dường như không hoạt động trong tình huống này.

bổ sung Thông tin: tôi rất thích chỉ lấy mã trong vòng lặp while, làm cho nó vào thực thi riêng của mình, và đặt vòng lặp while vào một kịch bản bash, nhưng có một số dữ liệu mỗi lần lặp đòi hỏi những gì còn lại tĩnh và nó mất quá nhiều thời gian để tái nạp dữ liệu mỗi lần như vậy tôi buộc phải làm vô hạn của tôi trong khi vòng lặp trong C++

+2

'bắt' ngoại lệ trong phạm vi vòng lặp và tiếp tục từ đó. Nhưng, thực sự bạn CẦN phải tìm nguyên nhân gốc rễ của vấn đề của bạn. – Chad

+0

Bạn có thể đăng một số mã để xem không ?. try {} catch() {} phải là tiêu chuẩn nếu bạn muốn ứng dụng mạnh mẽ – user710502

+0

Trường hợp ngoại lệ là ngoại lệ và phải được xử lý. Ngay cả khi bạn không thể theo dõi vấn đề. – Griwes

Trả lời

12

Bạn chỉ cần để bắt ngoại lệ bên trong vòng lặp while:

while(true) 
{ 
    try 
    { 
      // your code 
    } 
    catch (Exception e) { /* Please, at least do some logging or other error handling here*/ } 
} 
+1

'} bắt (std :: out_of_range & exc) {std :: cerr << exc.what(); } ' –

+0

Thiếu kiểu ngoại lệ trong' catch'. Tôi muốn đề nghị 'bắt (...)' vì động lực của anh ta để bắt được không phải là thiết kế tốt. –

+2

Cú pháp này có hợp lệ không? Tôi nhận được 'lỗi: dự kiến ​​'(’ trước khi ‘{’ mã thông báo' khi tôi thử một câu lệnh bắt thử mà không có bất kỳ dấu ngoặc đơn nào sau khi 'bắt'. – HelloGoodbye

1

điều đầu tiên mà bạn nên làm là gỡ lỗi mã, cho thứ bạn có thể chạy mã bên trong trình gỡ rối và chẩn đoán vấn đề là gì. Đẩy vấn đề dưới tấm thảm sẽ không làm cho nó biến mất, và chương trình vẫn sẽ bị lỗi.

Nếu mặt khác, sự cố xảy ra với một số thực sự là đặc biệt nhưng khả thi (xem xét mở tệp, gửi gói qua mạng, bất kỳ thứ gì có khả năng không thành công, nhưng không được mong đợi) so với cái gì đó nên không bao giờ xảy ra), cách tiếp cận try/catch sẽ hoạt động.

0

nếu bạn có thể đăng một đoạn mã, tất cả chúng ta đều có thể giúp bạn nhiều hơn. nhưng nhìn chung bạn nên luôn luôn có một số loại xử lý cho dù đó là một try {} catch {} hoặc chỉ kiểm tra một biến như lỗi:

while(true) 
{ 

if(flag == "Error") 
{ 
//error handle 
} 

else 
{ 
//continue with code execution 
} 

} 

hy vọng bạn nhận được vấn đề này được giải quyết!

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