C++ try catch 抛出

标签 c++ recursion exception try-catch factorial

我有一个简单的递归阶乘程序。本练习的重点是处理异常。我们被强加了没有负数和没有大于 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”,程序就会开始无限循环。我如何编写代码来检查并确保它确实是用户输入的数字?

谢谢。

最佳答案

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

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

关于C++ try catch 抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22798763/

相关文章:

c++ - 显着增加内存的使用

python - 将 print 语句添加到 ValueError 异常

java - 缺少子类的方法实现时的标准异常?

c++ - 应用程序退出时出现 SegFault

c++ - 在高度优化的代码中计算代码运行时间

c - 了解递归十进制到二进制代码?

java servlet :response. sendRedirect() 如果在提交响应后调用则不会给出非法状态异常。为什么?

c++ - 在 C++ 中静态地将用户输入获取到类中

c++ - Clang 和 GCC 在使用大括号表示法和 initializer_list 时不同意构造函数的选择

C++ 返回许多递归调用中最小值的最佳方法