Проблема в моем заявлении IF, остальное не работает правильно - PullRequest
0 голосов
/ 29 января 2019

Мой простой код просто получает доход от пользователя и вычисляет, в какой скобке находится пользователь.

Оператор IF работает нормально, но когда пользователь вводит некоторое значение с двумя десятичными знаками (например, 100.50)Значение кода вывести правильный налог и оператор 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 голосов
/ 29 января 2019

Что я могу сделать, чтобы это исправить?

Исправьте ваши заявления 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;
0 голосов
/ 29 января 2019

Ну, конечно, вы сказали, что

if (income > 336550.00)
    cout << "35%" << endl;
else
    cout << "Please enter a valid value" << endl;

и 100.50> 336550.00 - ложь, поэтому выполняется другая часть.Чего вам не хватает, так это того, что вы должны использовать 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 в том, что как только одно из условий выполняется, все остальные игнорируются, что, очевидно, и является тем, что вы намеревались.

0 голосов
/ 29 января 2019

Ваши 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 равно false, даже если cond1 или cond2верно.

0 голосов
/ 29 января 2019

Проблема в том, что ваш else является else для if (income > 336550.00).Если это ложь, тогда сработает остальное.Неважно, если вы уже рассмотрели это в другом операторе if.То, что вам нужно сделать, это объединить все операторы if вместе, используя else if, так что выполняется только оператор if или последний оператор else.Это выглядит как

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, поэтому вам не нужно иметь бесполезный return 0; в конце функции.Кроме того, как указал Jarod42, имя функции также неверно.Вы называете это computeTax, но это не то, что вы делаете.Вы отображаете налоговую ставку, поэтому имя типа displayTaxRate является более точным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...