You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

函数在其他函数中调用时返回值异常问题排查

问题分析与修复方案

核心问题

  • 函数无法返回多个值: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:15:30