switch下if语句内的计算

Calculation within if statement under switch

我正在尝试编写代码,允许用户输入申报状态和收入来计算欠税。如果归档状态输入在 1-4 之外,程序将退出。我正在尝试使用 switch 和 if else if,但看起来我坚持使用生成欠税部分的代码。每当我输入收入时,它都不会产生欠税额。例如,对于情况 1:在 switch(最后一行)中为归档状态输入 1(对于单身)并输入 20000 作为收入。结果应该显示 $3000 但不会给出任何结果。以下是我目前的代码。

#include<stdio.h>

int main()
{

//declaration  status = filing status , income = income input, taxOwed = tax owed calculation.
int status;
double income, taxOwed;

//data/input
printf("************Menu****************\n");
printf("1) Single\n");
printf("2) Married Filing Jointly\n");
printf("3) Married Filing Separately\n");
printf("4) Head of Household\n");
printf("5) Exit\n");
printf("\n");
printf("********************************\n");
printf("\n");
printf("Enter status : ");
scanf("%d", &status);

//processing switch with Calculation within each case
switch(status)
{
    case 5:
        printf("\n", status);
        printf("Exit Program...\n");
        break;
    case 6: case 7: case 8: case 9:
        printf("You entered a wrong status. Program Exit . . .");
        break;
    default:
        printf("You entered a wrong status. Program Exit . . .");
        break;
    case 1:
        printf("Enter your taxable TI: $");
        scanf("%.2lf\n", income);
        if (0 < income <= 24000)
        {
            taxOwed = (income * 0.15);
            printf("\n");
            printf("The taxes owed are: $%.2lf", taxOwed);
            break;
        }
        else if (24000 < income <= 58000)
        {
            taxOwed = 3600 + (0.28 * (income - 24000));
            printf("The taxes owed are: $%.2lf", taxOwed);
            break;
        }

}

return 0;
}

非常感谢任何评论和帮助。谢谢

声明

scanf("%.2lf\n", income);

是错误的,原因有以下三个:

  1. 函数scanf需要它应该写入的变量的地址,而不是变量的先前值。

  2. 不清楚您打算 .2 做什么。您可能将 scanf 格式字符串与 printf 格式字符串混淆了。这可能导致 scanf 失败。您应该始终检查 scanf 的 return 值,以查看函数是否成功。

  3. 格式字符串中的\n会导致scanf继续读取空白,直到找到非空白字符。这意味着您必须至少按两次 ENTER 键并且必须提供额外的输入。这可能不是你想要的。

因此,您应该将该行更改为以下内容:

scanf("%lf", &income);

此外,声明

if (0 < income <= 24000)

else if (24000 < income <= 58000)

错了。

他们应该是

if (0 < income && income <= 24000)

和:

else if ( 24000 < income && income <= 58000 )

他们错误的原因如下:

根据the rules on operator precedence,表达式

24000 < income <= 58000

相当于:

(24000 < income) <= 58000

这意味着这个表达式等同于

0 <= 58000

1 <= 58000

取决于 (24000 < income) 的计算结果是真 (1) 还是假 (0)。

在这两种情况下,整个表达式的计算结果都为真,因为 58000 大于 01

这就是写作的原因

if (0 < income <= 24000)

else if (24000 < income <= 58000)

没有意义,因为这些语句等同于写

if ( 1 )

和:

else if ( 1 )