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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:27:04