C 程序无法显示正确的计算结果

C 程序无法显示正确的计算结果,c,C,编写一个程序,询问员工的工资和服务年限。编写一个函数,根据服务年限更改薪资。如果员工的服务年限超过10年。他或她将得到10%的加薪。在5到10年之间,加薪幅度为5%。其他人都将得到2%的加薪。 Int calcbonus(Int年服务); 此函数计算并返回员工当年的奖金。员工每服务2年将获得500美元。 无效打印计算(整年服务、浮动工资、整年奖金); 此功能将以清晰专业的方式显示所有计算信息 #include <stdio.h> #include <conio.h> fl

编写一个程序,询问员工的工资和服务年限。编写一个函数,根据服务年限更改薪资。如果员工的服务年限超过10年。他或她将得到10%的加薪。在5到10年之间,加薪幅度为5%。其他人都将得到2%的加薪。 Int calcbonus(Int年服务); 此函数计算并返回员工当年的奖金。员工每服务2年将获得500美元。 无效打印计算(整年服务、浮动工资、整年奖金); 此功能将以清晰专业的方式显示所有计算信息

#include <stdio.h>
#include <conio.h>
float funsalary(float salary,float year);
float calcbonus(float year);
void printcalculation (float year,float salary,float bonus);
int main()
{
    float year,salary,bon;
    printf("Enter your salary");
    scanf("%f",&salary);
    printf("Enter your years of service");
    scanf("%f",&year);
    funsalary(salary,year);
    bon = calcbonus(year);
    printcalculation(year,salary,bon);
}
float funsalary(float salary,float year)
{
    float raise;
    if (year>10)
    {
        raise = salary*10/100;
    }
    else if (year>=5 && year<=10)
    {
        raise = salary*5/100;
    }
    else if (year<=2)
    {
        raise = salary*2/100;
    }
    return raise;
}
float calcbonus(float year)
{
    float bonus;
    bonus = (year/2)*500;
    return bonus;

}
void printcalculation(float year,float raise,float bon)
{
    float extra,total;
    total = raise+bon;
    printf("Total Income Is %f\n",total);
    }
#包括
#包括
浮动工资(浮动工资、浮动年度);
浮动calcbonus(浮动年);
无效打印计算(浮动年、浮动工资、浮动奖金);
int main()
{
浮动年,工资,苯教;
printf(“输入您的工资”);
scanf(“%f”和工资);
printf(“输入您的服务年限”);
scanf(“%f”、&year);
工资(工资,年度);
bon=calcbonus(年);
打印计算(年度、工资、苯教);
}
浮动工资(浮动工资,浮动年度)
{
浮升;
如果(年份>10)
{
加薪=工资*10/100;
}

否则,如果(year>=5&&year,则显示1500,因为在主函数中调用funsalary(salary,year)函数时,您没有存储产生问题的函数的返回值。您应该使用以下命令更改该行:

salary =  salary + funsalary(salary,year);    
//alternatively salary += funsalary(salary,year);  
以更新工资

或者,您可以指定一个指向salary的指针,然后将该引用传递给funsalary函数(当然是通过事先更新参数),如下所示:

int main{
int * salaryp;
salaryp = &salary;
funsalary(salaryp, year);
}
void funsalary(int * salaryp, year){
if (year>10)
{
    *salaryp = *salaryp*10/100;
}
else if (year>=5 && year<=10)
{
    *salaryp = *salaryp*5/100;
}
else if (year<=2)
{
    *salaryp = salaryp*2/100;
}
}
int main{
国际*薪水;
salaryp=&salary;
工资(薪水,年);
}
无效工资(国际*工资,年度){
如果(年份>10)
{
*薪水P=*薪水P*10/100;
}

否则如果(year>=5&&year没有剖析整个过程,但是你忽略了
funcalray
的返回值,然后你将
salary
传递到
printcumption
它期望的
raise
。我想问题就在那里。顺便说一句,粘贴时最好使用空格,而不是制表符请在此处输入代码。有关设置代码格式的正确方法,请参见我的编辑。您可以突出显示它,然后单击
{}
按钮。一个问题:工资增量是否累计。它显示的输入信息正确:1000工资,2年服务,输出为1520,但当我输入1000,4年服务时,输出错误。为什么?编辑:无需担心,它是固定的,我的else条件没有包含“4年服务”的情况。现在它显示正确的输出!