前和后条件用法。为什么程序不响应条件
pre & post condition usage. Why isn't the program responding to conditions
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
并抓住它。
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 为什么简单的算术减法在"if"条件下不起作用?
- 循环中的条件:为什么每次都调用strlen(),而vector.size()只调用一次
- 为什么我的最后一个 ELSE 条件无法正确执行
- 条件不起作用,谁能解释为什么会这样?
- 为什么这个if(s[j]==s[i] && i>0)条件不适用于这个[{()}]
- 为什么我不能在 for 循环中出现这样的条件?(C++)
- 为什么在环路条件中使用'<='而不是'<'会产生分段错误 [SIGSEGV]?
- 为什么循环没有中断,并且 if 条件没有按预期工作?
- 为什么我不能将 size() 函数编写为 while 循环中的条件?
- 为什么当条件为真时 x 的值没有改变?
- 为什么在同一条件变量上使用多个互斥锁会使此代码崩溃?
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?
- 从语言设计层面来看,当编译时无法推断条件时,为什么"if constexpr"不衰减到"trival if"
- 为什么我可以将 ifstream 文件置于 if 条件?
- 为什么此代码不创建争用条件?
- 请解释条件变量在 c++ 线程中的使用,以及为什么我们需要同时使用"unique_lock"和&qu
- 为什么当我进入退出条件时,程序会打印两倍的默认条件而不是退出 while 循环?
- 为什么有条件编译运算符模板会更改另一个运算符的可用性?
- 如果条件,为什么它没有进入内部?