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

pre & post condition usage. Why isn't the program responding to conditions

本文关键字:条件 为什么 程序 不响应 用法      更新时间:2023-10-16
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,则程序将失败并且不会抛出所需的消息。它只显示一个默认错误。

是前置和后置条件的不当使用吗?

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

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(); }

您正在抛出类型const char *的异常,但将它们捕获为类型int。 要解决此问题,您需要做的就是更改:

catch (int error)

自:

catch (const char * error)

现场演示

或者,正如QuestionC所说,你可以扔一个std::runtime_error并抓住它。