函数在其他函数中调用时返回值异常问题排查
问题分析与修复方案
核心问题
- 函数无法返回多个值:C语言里
return语句只能返回单个值,你写的return one,two,three,four;是逗号表达式,实际只会返回最后一个变量four,前面的变量值都会被丢弃。 - 局部变量作用域不共享:
get()函数里定义的one、two等是局部变量,函数执行完毕后这些变量就会被销毁。add()函数里的同名变量是全新的未初始化变量,存储的是随机垃圾值,自然无法正确参与计算。
修复方案
方案1:使用指针传递参数
让get()函数通过指针接收变量地址,直接修改add()函数里的变量值:
#include <stdio.h> // 通过指针接收变量地址,直接修改外部变量 void get(int *one, int *two, int *three, int *four) { scanf("%d %d %d %d", one, two, three, four); } int add() { int one, two, three, four; int result1, result2, result3; // 传递四个变量的地址给get函数 get(&one, &two, &three, &four); result1 = one + two; if (result1 == three) { result2 = four - three; result3 = result2 + four; printf("Added %d, 5th number is %d", result2, result3); } else { printf("error, %d %d %d %d", one, two, three, four); } return 0; } int main() { add(); return 0; }
方案2:使用结构体返回多个值
定义一个结构体打包四个输入值,让get()函数返回这个结构体:
#include <stdio.h> // 定义结构体存储四个输入整数 typedef struct { int one; int two; int three; int four; } InputNumbers; InputNumbers get() { InputNumbers nums; scanf("%d %d %d %d", &nums.one, &nums.two, &nums.three, &nums.four); return nums; } int add() { InputNumbers nums = get(); int result1, result2, result3; result1 = nums.one + nums.two; if (result1 == nums.three) { result2 = nums.four - nums.three; result3 = result2 + nums.four; printf("Added %d, 5th number is %d", result2, result3); } else { printf("error, %d %d %d %d", nums.one, nums.two, nums.three, nums.four); } return 0; } int main() { add(); return 0; }
内容的提问来源于stack exchange,提问作者ToastedBread32
相关产品推荐
相关产品推荐

