1

我正在尝试创建一个函数将返回位于结构中的值。我的问题是试图弄清楚我可以通过函数返回什么theInfo = NULL

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

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

3 回答 3

2

您需要返回两条信息 - 号码,以及该号码是否有效的指示。一种方法是更改​​函数的签名以指示它是否返回任何内容,如果返回,则将该值粘贴到变量中。这是一个如何做到这一点的例子:

// 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");
}

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

于 2013-04-01T15:40:45.080 回答
2

您可以传递一个指针并返回一个指示成功的布尔值:

bool getTime(MyStruct* info, int* time) {  
    if (info) {
        *time = info->waitTime;
        return true;
    }
    *time = 0;
    return false;
}

然后在某个地方你会打电话:

int time;
if (!getTime(info, &time)) {
    // TODO: retrieval of time failed
}
于 2013-04-01T15:41:27.913 回答
2

刚回来-1。我确信等待时间总是积极的。

所以返回 -1 如果它是 NULL 然后检查-1

else{
    printf("getTime Patron is nonexistent\n");
    return -1;
  }


void someFunc() {
//...
   int wtime = getTime(astruct);
   if (wtime == -1)
       // error

//...
}
于 2013-04-01T15:43:04.760 回答