我的IF语句中的问题,其他方法无法正常工作

时间:2019-01-29 16:13:34

标签: c++ if-statement

我的简单代码只是从用户那里获得收入,并计算出用户所处的位置。

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;
}

4 个答案:

答案 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
{
    ...
}

即使cond1cond2cond3是互斥的(就像您的代码一样),仍然需要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的一点是,只要其中一个条件成立,其余所有条件都将被忽略,这显然是您想要的。