2014-07-20 24 views
9

Tôi đang cố nhập số, n và nhận số siêu may mắn ít nhất bằng hoặc nhiều hơn n. Siêu may mắn: biểu diễn thập phân của nó chứa số lượng bằng chữ số 4 và 7. Ví dụ: số 47, 7744, 474477 là siêu may mắn và 4, 744, 467 thì không.Lỗi gỡ lỗi -Abort() Đã được gọi là

Dưới đây là mã của tôi

 #include<iostream> 
    #include<string> 
    using namespace std; 

    void superLucky(int n,string s, int count4, int count7) 
    { 
     if (s.size() > 10) 
      return; 
     if ((stoi(s) >= n) && (count4 == count7) && (count4+count7)!=0) 
     { 
      cout << s << endl; 
      return; 
     } 

     superLucky(n, s + '4', count4+1, count7); 
     superLucky(n, s + '7',count4,count7+1); 
    } 

    int main() 
    { 
     int n; 
     cin >> n; 
     superLucky(n, "", 0, 0); 
     return 0; 
    } 

Khi tôi nhập một số nguyên tôi nhận debug lỗi R6010 - abort() đã được gọi. Điều này có nghĩa là gì? và làm thế nào tôi có thể sửa lỗi này?

+0

Nó có nghĩa là những gì nó nói; chức năng 'abort' được gọi. Đính kèm một trình gỡ lỗi và xem nơi nó được gọi. –

+0

Nó được gọi là thứ hai nếu điều kiện – MNada

Trả lời

4

Có vài vấn đề:

  1. Khi bạn gọi superLucky từ main, s trống. stoi(s) ném ngoại lệ khi s trống.

  2. Séc séc s.size() > 10 không mạnh. Nó phụ thuộc vào nền tảng. Bạn có thể sử dụng khối try/catch để xử lý khối thay vì mã hóa kích thước cứng.

Đây là phiên bản mạnh mẽ hơn của hàm.

void superLucky(int n,string s, int count4, int count7) 
{ 
    int d = 0; 
    if (s.size() > 0) 
    { 
     try 
     { 
     d = stoi(s); 
     } 
     catch (...) 
     { 
     return; 
     } 

     if ((d >= n) && (count4 == count7) && (count4+count7)!=0) 
     { 
     cout << s << endl; 
     return; 
     } 
    } 

    superLucky(n, s + '7',count4,count7+1); 
    superLucky(n, s + '4', count4+1, count7); 
} 
+0

Nó hoạt động tốt ngay bây giờ. cám ơn). – MNada

+0

@ User3697826, bạn được chào đón. –

0

Có thể vì stoi() đã ném một ngoại lệ invalid_argument.

0

Trong lần gọi đầu tiên đến superLucky, bạn chuyển một chuỗi trống đến std::stoi. Khi không thể thực hiện chuyển đổi, stoi sẽ ném ngoại lệ. ngoại lệ mà không bị bắt, vì vậy uncaught_exception được gọi, nó sẽ gọi abort

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