我有一个整数函数,它返回一个宽范围的整数(在C中)。 我该如何处理无效输入?我的意思是如果输入无效,应该返回什么? 对不起如果这个问题太基础了。我没经验,也找不到其他地方的答案。
答案 0 :(得分:2)
取决于价值范围。例如,如果您的函数仅在成功时返回正值,则返回-1表示错误。如果它通常只返回值> 0,则在出错时返回0。
如果它返回int范围内的任何可能值,那么您可能需要一种不同的方法,例如
bool GetValue(int inputValue, int *outResult);
您的函数将结果存储在outResult
中,或者如果发生错误则返回false。
答案 1 :(得分:0)
您的输出范围是否为负数?如果不是,-1是一个合理的标准代码返回。你从哪里得到输入?
答案 2 :(得分:0)
此输入来自何处?我假设来自用户或文件。忘记该死的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'...
请原谅任何低效/不正确的代码,我自己就是编程菜鸟。
答案 3 :(得分:0)
对于所有情况,确实没有任何标准方法。 -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;
}
}
或类似的东西。
答案 4 :(得分:0)
我的偏好是,在使用缺少异常处理的语言编写代码时,总是将返回值用作错误指示符。
int get_value(int *value)
{
if ( input_ok )
*value = input;
return 0;
return -1;
}
这似乎不实用,因为它会强制您使用中间变量来存储函数结果,但事实证明它有很多次来捕获错误并正确处理它们(您永远不能依赖用户输入)。
另外,你应该注意,有一个特殊值来显示错误并不是一个好主意:你永远不知道你的代码会发生什么。如果以后要添加新功能,不幸的是特殊值对此功能有用,您会怎么做?用另一个特殊错误值写一个新函数?如果输入应覆盖整个返回类型范围怎么办?如果这是一个更大的项目的一部分,你怎么能确保每个可能使用你的功能的程序员都知道特殊的价值?
安全方面的错误:不要使用特殊值并使用专用的错误处理路径。
请注意,您可以撤消上述代码并撰写int get_value(int *error);