2014-04-01 148 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) 
...