创建 int 函数,在发生错误的情况下无法返回有效的 int 值

标签 c function error-handling struct return-value

我正在尝试创建一个函数,该函数将返回位于结构中的值。我的问题是试图弄清楚如果 theInfo = NULL?

我可以通过函数返回什么?

下面是我到目前为止创建的内容。这可能吗?

int getTime(struct * theInfo){  
  if(theInfo != NULL){
      return theInfo->waitTime;
  }
  else{
    printf("getTime Patron is nonexistent\n");
    return(thePatron);
  }
}

最佳答案

您需要返回两条信息 - 号码,以及该号码是否有效的指示。一种方法是更改​​函数的签名以指示它是否返回任何内容,如果返回,则将该值保存在变量中。以下是如何执行此操作的示例:

// This function returns 1 or 0.
// 1 indicates success; 0 indicates failure
// If your compiler is up to C99 standard, use "bool" instead of "int" below
int getTime(struct * theInfo, int *result) {
    if(theInfo != NULL){
        *result = theInfo->waitTime;
        return 1;
    } else{
        // result stays unchanged
        return 0;
    }
}

现在您可以像这样使用这个新功能:

int res;
if (getTime(&myInfo, &res)) {
    printf("getTime returned %d\n", res);
} else {
    printf("getTime Patron is nonexistent\n");
}

当您不需要返回完整范围的数字时,可以使用不太通用的替代方法。例如,如果您的函数返回的有效时间始终为正数,则您可以采用使用负数表示出现错误的约定。这种方法也是有效的,但它更多地依赖于约定,因此您的代码的读者需要查看您的函数文档以了解发生了什么。

关于创建 int 函数,在发生错误的情况下无法返回有效的 int 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15746464/

相关文章:

c - 函数输入参数类型转换不当

c++ - 如何从一个函数返回多个类型?

java - 在 main() 中调用 int 函数来显示当前工作日

c# - 注意错误而不返回错误值?内部更多信息

java - 使用Spring @ControllerAdvice的全局错误处理程序不起作用

javascript - Python、jQuery、C 语法在语法方面有多相似?

c - 从内核分配用户空间内存

c++ - 编译多源程序文件时,MinGW 是否创建目标文件?

python - 可以在 python 类中创建一个 def,即使 def 不存在也可以调用 def 名称

python-3.x - Discord.py:我的程序似乎无法区分错误(MissingPerms、BotMissingPerms),因此使用了错误的处理程序