为什么该程序不执行任何操作?

时间:2018-09-27 19:46:40

标签: c++

enter image description here

我正在在线阅读一些函数代码,它具有这种抛出语句。

我实现了相同的功能,但是当我调用它以确保它抛出(通过使x为负数)时,我的代码不起作用,因为我不是在“处理异常”。

但是图中的代码也没有,所以这里发生了什么?

基本上,我要寻找的是一个函数,当有人向函数输入错误的参数时调用该函数,然后该函数只是暂停程序并说“不,您做错了”。我怎么做?

我在网上阅读了一些有关掷球,接球和尝试所有内容的信息,但实际上,我不想这样做。我只想让一件事在感觉到问题后就暂停程序。

1 个答案:

答案 0 :(得分:1)

如果您只想生成一些消息(例如在控制台输出中),则可以简单地修改第一个条件:删除throw,将输出添加到std :: cout并返回一些值(例如0)。即替换

if (x < 0.0 || a <= 0.0) throw("bad args in gammq");

通过

if (x < 0.0 || a <= 0.0)
{
   std::cout << "bad args in gammq";
   return 0.;
}

但是,这意味着您需要检查函数的结果以使用它,因为0表示错误。否则,您可以将计算加入try块并捕获该块的异常。并且针对这种情况生成std :: invalid_argument异常更为准确。因此条件:

if (x < 0.0 || a <= 0.0) throw("bad args in gammq");

最好修改为

if (x < 0.0 || a <= 0.0) throw std::invalid_argument("bad args in gammq");

请记住

#include <stdexcept>

定义了std :: invalid_argument。用法是:

try
{
   Doub a,x;
   // some computations and initialization of a and x
   Doub val = gammq(a,x);
   // some other computations
}
catch(std::invalid_argument& e)
{
   std::cout << e.what();
}

一旦gammq收到错误的参数,try块中的计算将终止,并且catch块将在控制台输出中生成消息。