可能重复:
Error checking a function that returns an int如果输入无效,int函数应该返回什么?
我有一个返回在宽范围内的整数(在C)的整数函数。 我应该如何处理无效输入?我的意思是,如果输入无效,应该返回什么? 对不起如果这个问题太基本了。我没有经验,在其他地方找不到答案。
可能重复:
Error checking a function that returns an int如果输入无效,int函数应该返回什么?
我有一个返回在宽范围内的整数(在C)的整数函数。 我应该如何处理无效输入?我的意思是,如果输入无效,应该返回什么? 对不起如果这个问题太基本了。我没有经验,在其他地方找不到答案。
您的输出范围是否为负数?如果不是,-1是返回的合理标准代码。你从哪里得到输入?
的输入来自用户,输出不会变成负数。但也有其他的int函数接受来自其他函数的输入,而不是用户。我应该从非主int函数中终止程序吗?或者我应该检查主返回值是否为-1并从那里终止? – Bob 2011-03-26 06:34:09
取决于数值范围。例如,如果您的函数只希望成功返回正值,则返回-1表示发生错误。如果它通常只返回大于0的值,则在出错时返回0。
如果返回整型范围内的任何可能的值,那么你可能需要不同的方法,例如
bool GetValue(int inputValue, int *outResult);
在您的函数存储在outResult
结果,或如果发生错误返回false。
@EboMike所以-1现在是正值吗? – quasiverse 2011-03-26 06:26:20
显然,我在说“如果函数成功完成后的可能返回值是肯定的”。这个想法是,你想返回一个错误的值,如果函数调用成功,那么不可能返回一个值。 – EboMike 2011-03-26 06:27:34
即使0不是有效的值,我也会返回-1来指示总是出错。这样-1总是意味着错误,而不是-1和其他时间0. – 2011-03-26 06:28:10
此输入来自哪里?我假设来自用户或文件。忘记什么该死的C函数希望返回到一个电话,我建议做一个检查,如果输入的是在函数的开始一个int:
if (userinput/1.00 == (int)userinput)
We have an integer! Rest of the function goes here...
else
Do something else like abort the function and change the 'input'...
请原谅任何低效/不正确的代码,我自己就是我编程noob。
真的没有任何标准的方法适用于所有情况。 -1是一个常见的“通用错误”返回值。你也可以做了一堆定义是这样的:
#define MEMORY_ERROR 1
#define OUT_OF_BOUNDS 2
#define ... 3
etc...
,然后你可以使用这样做:
int func()
{
...
...
if(condition) {
// Error handling
return MEMORY_ERROR;
}
...
if(condition) {
// Error handling
return OUT_OF_BOUNDS;
}
}
或类似的东西。
我的偏好是,在用缺少异常处理的语言编写代码时,总是使用返回值作为错误指示符。
int get_value(int *value)
{
if (input_ok)
*value = input;
return 0;
return -1;
}
这似乎并不实用,因为它强迫你使用中间变量来存储功能的结果,但它证明是有益的这么多次捕获错误和正确处理它们(你永远不能依靠用户输入)。另外,你应该注意,具有显示错误的特殊值不是一个好主意:你永远不会知道你的代码会发生什么。如果稍后想要添加新功能,并且不幸的是该特殊值对此功能很有用,那么您会做什么?用另一个特殊的错误值写一个新的函数?如果输入应覆盖返回类型的整个范围,该怎么办?如果这是一个更大的项目的一部分,你如何确保每个可能使用你的函数的程序员都知道特殊的价值?
太安全了:不要使用特殊值并使用专用的错误处理路径。
请注意,您可以颠倒上面的代码,写int get_value(int *error);
重复http://stackoverflow.com/questions/4776329/error-checking-a-function-that-returns-an-int – stefan 2011-03-26 06:34:11