我试图创建一个函数将返回结构中的值。我的问题是试图找出我可以通过函数返回的内容theInfo = NULL
?
以下是我到目前为止所创建的内容。这可能吗?
int getTime(struct * theInfo){
if(theInfo != NULL){
return theInfo->waitTime;
}
else{
printf("getTime Patron is nonexistent\n");
return(thePatron);
}
}
答案 0 :(得分: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");
}
当您不需要返回完整范围的数字时,可以使用不太常用的替代方法。例如,如果函数返回的有效时间始终为正,则可以采用使用负数表示存在错误的约定。这种方法也是有效的,但它更多地依赖于约定,因此您的代码的读者需要查看您的函数文档以查看正在发生的事情。
答案 1 :(得分: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
}
答案 2 :(得分:2)
返回-1
。我确信等待时间总是积极的。
如果为NULL则返回-1,然后检查-1
else{
printf("getTime Patron is nonexistent\n");
return -1;
}
void someFunc() {
//...
int wtime = getTime(astruct);
if (wtime == -1)
// error
//...
}