如果输入无效,int函数应该返回什么?

时间:2011-03-26 06:19:18

标签: c exception-handling

  

可能重复:
  Error checking a function that returns an int

我有一个整数函数,它返回一个宽范围的整数(在C中)。 我该如何处理无效输入?我的意思是如果输入无效,应该返回什么? 对不起如果这个问题太基础了。我没经验,也找不到其他地方的答案。

5 个答案:

答案 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);