我的简单代码只是从用户那里获得收入,并计算出用户所处的位置。
IF语句运行正常,但是当用户输入带有两个小数(例如100.50)值的某个值时,代码将输出正确的tax和else语句。
该如何解决?
#include <iostream>
#include <iomanip>
using namespace std;
/**********************************************************************
* This function will calculate which tax bracket a user is in.
***********************************************************************/
bool computeTax(float income)
{
if (income >= 0.00 && income <= 15100.00)
cout << "10%" << endl;
if (income > 15100.00 && income <= 61000.00)
cout << "15%" << endl;
if (income > 61300.00 && income <=123700.00)
cout << "25%" << endl;
if (income > 123700 && income <= 188450.00)
cout << "28%" << endl;
if (income > 188450.00 && income <= 336550.00)
cout << "33%" << endl;
if (income > 336550.00)
cout << "35%" << endl;
else
cout << "Please enter a valid value" << endl;
return 0;
}
int main()
{
// configure the output to diplay money
cout.setf(ios::fixed); // no scientific notation except for the deficit
cout.setf(ios::showpoint); //always show the decimal point
cout.precision(2); // two decimal for cents
float income;
cout << "Please enter your income: ";
cin >> income;
computeTax(income);
return 0;
}
答案 0 :(得分:2)
这里的问题是您的else
仅是else
的{{1}}。如果那是错误的,则其他将触发。如果已经在另一个if语句中使用过这种情况,则没有关系。您需要做的是使用if (income > 336550.00)
将所有if语句链接在一起,这样就只能执行if语句或最终的else语句。看起来像
else if
还请注意,bool computeTax(float income)
{
if (income >= 0.00 && income <= 15100.00)
cout << "10%" << endl;
else if (income > 15100.00 && income <= 61000.00)
cout << "15%" << endl;
else if (income > 61300.00 && income <=123700.00)
cout << "25%" << endl;
else if (income > 123700 && income <= 188450.00)
cout << "28%" << endl;
else if (income > 188450.00 && income <= 336550.00)
cout << "33%" << endl;
else if (income > 336550.00)
cout << "35%" << endl;
else
cout << "Please enter a valid value" << endl;
return 0;
}
可以具有computeTax
的返回类型,因此您不必在函数末尾使用无用的void
。同样,正如Jarod42所指出的,该函数的名称也是错误的。您将其称为return 0;
,但这不是您正在做的。您正在显示税率,所以更像computeTax
之类的名称。
答案 1 :(得分:2)
您的if
语句彼此独立地解释。您需要在最终else if
之前的所有中间if
语句中使用else
,如下所示:
if(cond1)
{
...
}
else if(cond2)
{
...
}
else if(cond3)
{
...
}
else // all other cases
{
...
}
即使cond1
,cond2
和cond3
是互斥的(就像您的代码一样),仍然需要else if
语句,因为else
即使if(cond3)
或cond3
为true,即使cond1
为假,仍将采用与cond2
绑定的控制路径。
答案 2 :(得分:2)
该如何解决?
修正您的if语句!它们需要一系列级联,在每个else
之前使用if
。
此外,您应避免使用浮点数(或双精度数)进行相等比较。
最后,如果您利用级联的每个步骤中已经确定的内容,则不需要所有比较。
if ( income > 336550.00 )
cout << "35%" << endl;
else if ( income > 188450.00 )
cout << "33%" << endl;
else if ( income > 123700.00 )
cout << "28%" << endl;
else if ( income > 61300.00 )
cout << "25%" << endl;
else if ( income > 15100.00 )
cout << "15%" << endl;
else if ( income > 0.00 )
cout << "10%" << endl;
else
cout << "Please enter a valid value" << endl;
答案 3 :(得分:1)
当然,你说
if (income > 336550.00)
cout << "35%" << endl;
else
cout << "Please enter a valid value" << endl;
和100.50> 336550.00为false,因此执行else部分。您缺少的是应该使用if ... else if ... else
。像这样
if (income >= 0.00 && income <= 15100.00)
cout << "10%" << endl;
else if (income > 15100.00 && income <= 61000.00)
cout << "15%" << endl;
else if (income > 61300.00 && income <=123700.00)
cout << "25%" << endl;
else if (income > 123700 && income <= 188450.00)
cout << "28%" << endl;
else if (income > 188450.00 && income <= 336550.00)
cout << "33%" << endl;
else if (income > 336550.00)
cout << "35%" << endl;
else
cout << "Please enter a valid value" << endl;
关于if ... else if
的一点是,只要其中一个条件成立,其余所有条件都将被忽略,这显然是您想要的。