C语言如何从void函数获取输入值用于奖金计算
问题原因分析
- 你代码里的
salary、years_service都是定义在函数内部的局部变量,作用域仅限当前函数内部,函数执行结束后内存就会被回收,两个函数里的同名变量没有任何关联,所以自然无法传递数值。 void类型函数没有返回值,你没办法直接通过返回值把输入结果带出来,所以需要用指针传参的方式把函数外的变量地址传入函数,在函数内部直接修改地址对应的内存值,实现数据的跨函数传递。
修正方案
我们可以通过以下步骤修改代码:
- 给
GetInput增加两个指针参数,分别接收外部薪资变量、工龄变量的地址,把用户输入的值直接写入对应的内存地址 - 给
CalcRaise增加两个入参,直接接收薪资、工龄数值做计算 - 在
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
相关产品推荐
相关产品推荐

