编写包含循环的程序
while (scanf("%1f", &salary) == 1) {...}
在循环体内计算17%的联邦预扣税和3%的州预扣税,并打印这些值以及相应的工资。累计印刷的所有工资和税金的总和。程序退出while循环后打印这些总和。
我目前的代码:
float salary, federal_tax, state_tax, salary_after_tax, salary_sum, tax_sum, salary_after_tax_sum;
printf("Enter Salary: $");
while (scanf("%lf", &salary) == 1)
{
salary_sum = salary;
federal_tax = salary*(.17);
state_tax = salary*(.03);
tax_sum = federal_tax + state_tax;
salary_after_tax = salary - federal_tax - state_tax;
salary_after_tax_sum = salary_after_tax;
printf("Salary before tax = %lf", salary);
printf("Federal tax = %lf", federal_tax);
printf("State tax = %lf", state_tax);
printf("Salary after tax = %lf\n", salary_after_tax);
break;
}
printf("total salary before tax = %lf", salary_sum);
printf("total tax = %lf", tax_sum);
printf("total salary after tax = %lf\n", salary_after_tax_sum);
system ("pause");
return 0;
}
由于某种原因,它不起作用。任何帮助将不胜感激。
答案 0 :(得分:3)
您的scanf
说明符是%lf
(您的问题陈述是%1f
而不是故意的?)然后您将存储到float
。我的scanf(3)
说%lf
指定double
。
顺便说一句,float
的精确度远远低于许多程序员所期望的精度,只有大约7位数,所以使用double
代替工资可能是一个好主意。
答案 1 :(得分:1)
您应该在循环外将..._sum
变量指定为0,并在循环中使用+=
递增它们;你现在正在做的事情是每次通过循环重新分配它们,那不是求和! - )
答案 2 :(得分:0)
你骗了编译器它得到了报复:%lf
格式需要使用指针加倍,而你只提供指向浮点数的指针。这意味着C语言中的未定义的行为(可能发生任何事情)。
通过将浮动声明转换为双精度来修复它们。