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);
是错误的,原因有以下三个:
函数scanf
需要它应该写入的变量的地址,而不是变量的先前值。
不清楚您打算 .2
做什么。您可能将 scanf
格式字符串与 printf
格式字符串混淆了。这可能导致 scanf
失败。您应该始终检查 scanf
的 return 值,以查看函数是否成功。
格式字符串中的\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
大于 0
和 1
。
这就是写作的原因
if (0 < income <= 24000)
和
else if (24000 < income <= 58000)
没有意义,因为这些语句等同于写
if ( 1 )
和:
else if ( 1 )
我正在尝试编写代码,允许用户输入申报状态和收入来计算欠税。如果归档状态输入在 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);
是错误的,原因有以下三个:
函数
scanf
需要它应该写入的变量的地址,而不是变量的先前值。不清楚您打算
.2
做什么。您可能将scanf
格式字符串与printf
格式字符串混淆了。这可能导致scanf
失败。您应该始终检查scanf
的 return 值,以查看函数是否成功。格式字符串中的
\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
大于 0
和 1
。
这就是写作的原因
if (0 < income <= 24000)
和
else if (24000 < income <= 58000)
没有意义,因为这些语句等同于写
if ( 1 )
和:
else if ( 1 )