我正在在线阅读一些函数代码,它具有这种抛出语句。
我实现了相同的功能,但是当我调用它以确保它抛出(通过使x为负数)时,我的代码不起作用,因为我不是在“处理异常”。
但是图中的代码也没有,所以这里发生了什么?
基本上,我要寻找的是一个函数,当有人向函数输入错误的参数时调用该函数,然后该函数只是暂停程序并说“不,您做错了”。我怎么做?
我在网上阅读了一些有关掷球,接球和尝试所有内容的信息,但实际上,我不想这样做。我只想让一件事在感觉到问题后就暂停程序。
答案 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块将在控制台输出中生成消息。