前后条件的用法。程序为什么不响应条件

时间:2019-04-06 16:57:50

标签: c++

int mult (int a, int b)
{
     if (a <= 0 || b <= 0) throw (" Your input is invalid. No zero");

     int doub = a * b;

     if (doub <= 0) throw (" Invalid value");

     cout << "\\n" << doub;

     return doub;
}

//code that gives values of num1 & num2//

try
{
    mult(num1, num2);
}

catch (int error)
{
    cerr << " Error #@#$% invalid value";
}

如果两个值(num1,numa2)都大于0,则程序运行正常,但是,如果任何值小于0,则程序将失败,并且不会引发所需的消息。它只是显示默认错误。

使用前后条件是否不正确?

是投掷用法吗? (我对如何使用它有一些疑问,也许是这样,但我不知道)

2 个答案:

答案 0 :(得分:3)

throw (" Your input is invalid. No zero");您正在抛出char *

catch (int error),但是您正在抓到int。这是与char *不同的类型,因此不会捕获异常并将其传播到默认处理程序。

处理此问题的惯用方法是throw (std::runtime_error("Your input is invalid. No zero"));

catch (std::exception & e) { cerr << e.what(); }

答案 1 :(得分:1)

您将引发类型为const char *的异常,但会将其捕获为类型为int的异常。要解决此问题,您需要做的就是更改:

catch (int error)

收件人:

catch (const char * error)

Live demo

或者,如QuestionC所说,您可以扔std::runtime_error并抓住它。