求大shen指点
程序描述:
先选择工资等级,在输入工作时间,程序将打印工资总额,税金,净收入
1,基本工资:money1美元/小时
2,加班(超过四十小时) = 1.5 * money1美元/小时
3,税率:前300美元 15%
续150美元 20%
余下的 25%
问题描述:
自定义函数switch1()的的返回值(在程序的最下面),无法应用到原函数,求大shen指点一下,这个程序到底那里出了问题?输入之后直接就没有在执行结果了,switch1()后面的printf也没有打印
检验的数据
(能返回到主函数应该就没有问题, 主要想问返回值的问题)
选3
普通工资10/hr
加班工资15/hr
输入100
输出
The all money is $ 1500.00.
The less money is $ 337.50.
The last money is $ 1162.50.
#include<stdio.h>
//#define money1 10.0 //每小时工资10$
//#define money2 15.0 //每小时工资15$
#define j_time 40 //时间界点
#define s_money1 0.15 //税率1
#define s_money2 0.2 //税率2
#define s_money3 0.25 //税率3
#define j_money1 300 //税率1所对应的最大金额 300
#define j_money2 150 //税率2所对应的最大金额 150
void show_menu(void); //打印菜单函数原型
float switch1(void); //选中将选中的金额转换到主函数中
int main(void)
{
float time; //用户输入的工作时间
float z_money; //税前工资
float shui = 0; //税收金额
float jie; //税后工资
float money1; //每小时工资1
float money2; //每小时工资2,是1的1.5 倍
show_menu(); //打印菜单
money1 = switch1(); //导出所需要计算的金额
money2 = 1.5 * money1;
printf("\nEnter your works' time:");
scanf("%f", &time);
//时间
if(money1 != 0)
{
if(time <= j_time) //控制40小时上下的不同工资
z_money = time * money1;
else
z_money = time * money2;
//金钱
if(z_money <= j_money1)
{
shui += (z_money * s_money1); //300美元以内的税金
jie = z_money - shui; //税前工资 - 税金
}
else if(z_money <= (j_money1 + j_money2))
{
shui += j_money1 * s_money1; //300美元整的税金
shui += (z_money - j_money1) * s_money2; //300美元整的税金加上续150美元以内的税金
jie = z_money - shui; //税前工资 - 税金
}
else
{
shui += j_money1 * s_money1; //300美元整的税金
shui += j_money2 * s_money2; //续150美元整的税金
shui += ((z_money - (j_money1 + j_money2)) * s_money3); //余下工资的税金
jie = z_money - shui; //税前工资 - 税金
}
printf("The all money is $ %0.2f.\n", z_money);
printf("The less money is $ %0.2f.\n", shui);
printf("The last money is $ %0.2f.\n", jie);
}
printf("Bye!\n");
return 0;
}
void show_menu(void) //打印选择菜单
{
char s1[] = "1) $8.75/hr";
char s2[] = "2) $9.33/hr";
char s3[] = "3) $10.00/hr";
char s4[] = "4) $11.20/hr";
char s5[] = "5) Quit!";
printf("************************************************************\n");
printf("%-40s", s1);
printf("%-40s\n", s2);
printf("%-40s", s3);
printf("%-40s\n", s4);
printf("%-40s\n", s5);
printf("************************************************************\n");
}
float switch1(void) //根据菜单数值,赋相应的数值到b,返回主函数到money1
{
char a;
float b;
scanf("%c", a);
switch(a)
{
case '1':
{
printf("Hello, you select $8.75/hr.\n");
b = 8.75;
break;
}
case '2':
{
printf("Hello, you select $9.33/hr.\n");
b = 9.33;
break;
}
case '3':
{
printf("Hello, you select $10.00/hr.\n");
b = 10.00;
break;
}
case '4':
{
printf("Hello, you select $11.20/hr.\n");
b = 11.20;
break;
}
case '5':
{
b = 0; //想法:输入0为了让主函数的程序跳过循环
break;
}
}
return b; //返回数值,但是主函数无法识别到
}