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

C语言如何从void函数获取输入值用于奖金计算

问题原因分析
  • 你代码里的salary、years_service都是定义在函数内部的局部变量,作用域仅限当前函数内部,函数执行结束后内存就会被回收,两个函数里的同名变量没有任何关联,所以自然无法传递数值。
  • void类型函数没有返回值,你没办法直接通过返回值把输入结果带出来,所以需要用指针传参的方式把函数外的变量地址传入函数,在函数内部直接修改地址对应的内存值,实现数据的跨函数传递。
修正方案

我们可以通过以下步骤修改代码:

  1. 给GetInput增加两个指针参数,分别接收外部薪资变量、工龄变量的地址,把用户输入的值直接写入对应的内存地址
  2. 给CalcRaise增加两个入参,直接接收薪资、工龄数值做计算
  3. 在main函数中定义存储薪资、工龄的变量,分别传递给两个函数使用

另外你原代码的工龄判断逻辑有漏洞,漏掉了2-5年的区间,导致该区间的工龄会错误触发10%的奖金规则,下面的修正代码已经补上了对应判断:

#include <cstdio>

// 传入两个指针参数,接收外部变量的地址,直接修改外部变量的值
void GetInput(double* salary, int* years_service)
{
    printf("Enter your salary: ");
    scanf("%lf", salary); // salary本身已经是地址,不需要再加&
    printf("How many years have your served for us? ");
    scanf("%d", years_service); // 同上
}

// 直接接收薪资和工龄作为入参进行计算
void CalcRaise(double salary, int years_service)
{
    double bonusA = salary * .02;
    double bonusB = salary * .05;
    double bonusC = salary * .10;

    if (years_service < 2)
    {
        printf("Here is your bonus: %lf", bonusA);
    }
    else if (years_service >= 2 && years_service <=5 )
    {
        printf("Here is your bonus: %lf", bonusA);
    }
    else if (years_service > 5 && years_service < 10)
    {
        printf("Here is your bonus: %lf", bonusB);
    }
    else
    {
        printf("Here is your bonus: %lf", bonusC);
    }
    return;
}


int main()
{
    // 主函数中定义变量存储输入的薪资和工龄
    double salary;
    int years_service;
    // 传入变量地址给GetInput写入值
    GetInput(&salary, &years_service);
    // 把存储好的值传入CalcRaise计算
    CalcRaise(salary, years_service);
    return 0;
}

内容的提问来源于stack exchange,提问作者Lankbat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:36:10