2011-03-26 80 views
2

可能重复:
Error checking a function that returns an int如果输入无效,int函数应该返回什么?

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

+1

重复http://stackoverflow.com/questions/4776329/error-checking-a-function-that-returns-an-int – stefan 2011-03-26 06:34:11

回答

0

您的输出范围是否为负数?如果不是,-1是返回的合理标准代码。你从哪里得到输入?

+0

的输入来自用户,输出不会变成负数。但也有其他的int函数接受来自其他函数的输入,而不是用户。我应该从非主int函数中终止程序吗?或者我应该检查主返回值是否为-1并从那里终止? – Bob 2011-03-26 06:34:09

2

取决于数值范围。例如,如果您的函数只希望成功返回正值,则返回-1表示发生错误。如果它通常只返回大于0的值,则在出错时返回0。

如果返回整型范围内的任何可能的值,那么你可能需要不同的方法,例如

bool GetValue(int inputValue, int *outResult); 

在您的函数存储在outResult结果,或如果发生错误返回false。

+1

@EboMike所以-1现在是正值吗? – quasiverse 2011-03-26 06:26:20

+0

显然,我在说“如果函数成功完成后的可能返回值是肯定的”。这个想法是,你想返回一个错误的值,如果函数调用成功,那么不可能返回一个值。 – EboMike 2011-03-26 06:27:34

+0

即使0不是有效的值,我也会返回-1来指示总是出错。这样-1总是意味着错误,而不是-1和其他时间0. – 2011-03-26 06:28:10

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'... 

请原谅任何低效/不正确的代码,我自己就是我编程noob。

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; 
    } 
} 

或类似的东西。

0

我的偏好是,在用缺少异常处理的语言编写代码时,总是使用返回值作为错误指示符。

int get_value(int *value) 
{ 
    if (input_ok) 
     *value = input; 
     return 0; 
    return -1; 
} 

这似乎并不实用,因为它强迫你使用中间变量来存储功能的结果,但它证明是有益的这么多次捕获错误和正确处理它们(你永远不能依靠用户输入)。另外,你应该注意,具有显示错误的特殊值不是一个好主意:你永远不会知道你的代码会发生什么。如果稍后想要添加新功能,并且不幸的是该特殊值对此功能很有用,那么您会做什么?用另一个特殊的错误值写一个新的函数?如果输入应覆盖返回类型的整个范围,该怎么办?如果这是一个更大的项目的一部分,你如何确保每个可能使用你的函数的程序员都知道特殊的价值?

太安全了:不要使用特殊值并使用专用的错误处理路径。

请注意,您可以颠倒上面的代码,写int get_value(int *error);

相关问题