在C编程中循环

时间:2010-08-04 02:26:41

标签: c while-loop

编写包含循环的程序

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;

}

由于某种原因,它不起作用。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

您的scanf说明符是%lf(您的问题陈述是%1f而不是故意的?)然后您将存储到float。我的scanf(3)%lf指定double

顺便说一句,float的精确度远远低于许多程序员所期望的精度,只有大约7位数,所以使用double代替工资可能是一个好主意。

答案 1 :(得分:1)

您应该在循环外将..._sum变量指定为0,并在循环中使用+=递增它们;你现在正在做的事情是每次通过循环重新分配它们,那不是求和! - )

答案 2 :(得分:0)

你骗了编译器它得到了报复:%lf格式需要使用指针加倍,而你只提供指向浮点数的指针。这意味着C语言中的未定义的行为(可能发生任何事情)。

通过将浮动声明转换为双精度来修复它们。