2014-04-01 77 views
1

我有一個簡單的遞歸階乘程序。這個練習的要點是處理異常。我們一直實行有沒有負數的侷限性,並沒有數量大於12C++ try catch throw

{ 
    int factorial(int); 
    int number = 0; 
    string s; 
    while(number != -1) 
    { 
     cout << "Please enter a number 1 - 12 " <<endl; 
     cout << "or -1 to quit the program: "; 
     try{ 
     cin >> number; 
     if (number < 0 || number > 12) 
      throw number; 
     else 
      cout << number << " factorial is: " << factorial(number)<<"\n" << endl; 
     }catch(int number) 
     { 
     cout<< "Your number violates the rules; " <<number<<" is either negative or greater than 12.\n"<<endl; 
    } 
    } 

} 

int factorial(int number) { 
    int temp; 
    if(number <=1) 
     return 1; 
    temp = number * factorial(number - 1); 
    return temp; 
} 

我的錯誤處理似乎是它的正常工作,這是一個新的概念給我。但是,我想要更好地處理錯誤。例如,當我輸入任何不是數字的東西時,比如說「p」,程序就會啓動一個無限循環。我如何編碼檢查並確保它確實是用戶正在輸入的號碼?

謝謝。

+2

關於如何檢查輸入有效性的問題被無數次地回答!您只需檢查流是否處於良好狀態。如果沒有,您將重置流並忽略該字符。搜索問題在哪裏回答。另外,不要對非例外情況使用異常,並且總是拋出從std :: exception中派生的東西:一旦你試圖找到異常來自哪裏,而不是從'std :: exception'派生的東西,在一個有幾百萬行代碼的程序中,你會發現查看'what()'返回的內容是非常有用的! –

+0

不太清楚如何甚至搜索除關鍵詞像try,throw,catch,異常處理。沒有考慮檢查有效性。謝謝。 – HanH1113

回答

1

添加另一個條件來測試輸入。例如,你可以做到這一點。

... 
try{ 
     cin >> number; 
     if (!cin) { 
     //error msg here 
     break; 
    } else if (number < 0 || number > 12) 
...