如何在C语言中实现函数返回多个整数值?
C语言返回多值的实现方案
现有代码问题修正
你当前的代码存在逻辑错误:第二个读取y的do-while循环仍在校验x的范围,会导致y的输入校验完全失效,需要将判断条件修改为y < 0 || y > 10。
实现多值返回的三种常用方案
C语言原生不支持直接返回多个值,可通过以下三种方式实现需求:
方案1:指针传参输出(最推荐)
通过指针形参将变量地址传入函数,直接修改外部变量的值,无需返回值,或用返回值标识函数执行状态:
// 函数返回值可用于标识执行是否成功,0为成功,非0为失败 int i_want_to_return_those(int *out_x, int *out_y, int *out_z) { int x, y, z; do{ scanf("%d", &x); getchar(); }while (x < 0 || x > 10); do{ scanf("%i", &y); getchar(); }while (y < 0 || y > 10); // 这里修正了原代码的判断错误 do{ scanf("%i", &z); getchar(); }while (z < 0 || z > 10); // 赋值到外部传入的地址中 *out_x = x; *out_y = y; *out_z = z; return 0; } // 调用示例 int main() { int a, b, c; if (i_want_to_return_those(&a, &b, &c) == 0) { // 读取成功,直接使用a、b、c即可 } return 0; }
方案2:结构体封装返回
将三个变量封装为自定义结构体类型,函数直接返回结构体实例:
// 定义封装三个数值的结构体类型 typedef struct { int x; int y; int z; } NumTriple; NumTriple i_want_to_return_those() { NumTriple res; do{ scanf("%d", &res.x); getchar(); }while (res.x < 0 || res.x > 10); do{ scanf("%i", &res.y); getchar(); }while (res.y < 0 || res.y > 10); do{ scanf("%i", &res.z); getchar(); }while (res.z < 0 || res.z > 10); return res; } // 调用示例 int main() { NumTriple nums = i_want_to_return_those(); // 直接通过nums.x、nums.y、nums.z使用三个数值 return 0; }
方案3:全局变量存储(不推荐)
将三个变量定义为全局变量,函数内直接赋值即可在全局范围内读取,但会存在线程安全、函数不可重入的问题,仅作了解不建议使用。
内容的提问来源于stack exchange,提问作者Odir Albuquerque
相关产品推荐
相关产品推荐

