【发布时间】:2020-02-08 10:10:59
【问题描述】:
我编写了我的程序,该程序应该检查某人是否单身、已婚(分居或共同)以及他们是否是一家之主,以计算他们必须支付的税款。由于某种原因,当我为第一个 scanf 键入 y 时,下一个 if 语句被跳过。请帮忙!这是我的整个代码。我知道它不是最优化的,我可以清理它,但我只是想先弄清楚它有什么问题。
void question3 (void)
{
char single, head, joint;
int income = 0;
double tax = 0;
printf("What is your total income?");
scanf("%d", &income);
printf ("Are you single? (y/n) \n");
scanf (" %c", &single);
if (single == 'y')
{
if (income == 17850)
{
tax = income * .15;
}
else if (income >= 17850)
{
tax = ((.15 * 17850) + (.28 * (income - 17850)));
}
}
else
{
if (single != 'y')
{
printf("Are you the head of the house hold? y or n\n");
scanf(" %c", &head);
}
}
if (head == 'y')
{
if (income == 23900)
{
tax = income * .15;
}
else if (income >= 23900)
{
tax = ((.15 * 23900) + (.28 * (income - 23900)));
}
}
else if (head != 'y')
{
printf("Do you have a joint marriage\n");
scanf(" %c", &joint);
}
if (joint == 'y')
{
if (income == 29750)
{
tax = income * .15;
}
else if (income >= 29750)
{
tax = ((.15 * 29750) + (.28 * (income - 29750)));
}
}
else if (joint != 'y')
{
if(income == 14875)
{
tax = income * .15;
}
else if (income >= 14875)
{
tax = ((.15 * 14875) + (.28 * (income - 14875)));
}
}
printf("You owe %f dollars in taxes.", tax);
}
【问题讨论】:
-
第一次打电话给
scanf不是要收入吗?此外,您的 if 语句可能应该检查收入是否小于一个金额,而不是完全等于它。 -
当一个简单的
else可以做到时,你的else if (blah != 'y')是没有理由的。此外,如果income小于您的幻数(如17850)会怎样?您应该拥有if <和else。手动遍历您的逻辑,并思考每个值会发生什么。 -
Joint 和最后一个 else if 的代码也可以正常工作并给出正确的结果(分别为 7332.5 和 9266.5),但是当我输入 y 作为 single 时,它会继续问我家庭问题以及是否我对那个说 y 然后它给了我最后一个 else if 的答案。我只是不知道如何解决它。
-
您应该以
char head = 'y';开头,否则,当single为'y'时,没有为head分配值。顺便说一句,编译器应该警告你。
标签: c if-statement boolean scanf