【问题标题】:C++ try catch throwC++ 尝试捕捉抛出
【发布时间】:2014-04-01 23:21:55
【问题描述】:

我有一个简单的递归阶乘程序。本练习的重点是处理异常。我们受到了没有负数和大于 12 的数字的限制。

{
    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”,程序就会开始一个无限循环。我如何编码来检查并确保它确实是用户输入的数字?

谢谢。

【问题讨论】:

  • 关于如何检查输入的有效性的问题被回答了无数次!您只需检查流是否处于良好状态。如果没有,您将重置流并忽略该字符。搜索这个回答的问题。此外,不要对非异常情况使用异常,并且总是抛出源自std::exception 的东西:一旦您尝试定位不是源自std::exception 的异常的来源一个包含几百万行代码的程序,您会发现查看 what() 返回的内容非常有帮助!
  • 除了try、throw、catch、异常处理等关键字之外,甚至不知道如何搜索它。没有想到检查有效性。谢谢。

标签: c++ recursion exception-handling try-catch factorial


【解决方案1】:

添加另一个条件来测试输入。例如,您可以这样做。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 2010-11-23
    • 2013-08-04
    相关资源
    最近更新 更多