C ++ Если оператор проблема - отображение неверной информации - PullRequest
0 голосов
/ 04 июля 2011

У меня проблемы с отображением в моей программе информации из различных операторов if, когда их не должно быть. http://i53.tinypic.com/1zyx68.png

#include <iostream>
#include <string>
using namespace std;
int main( )
{
    string smreturn = "";
    string jointsingle = "";
    double income = 0.00;
double taxedincome = 0.00;
{
cout << "\nPlease enter your taxable income: ";
cin >> income;
while (income <= 0)
{
    cout << "\n Please enter a valid positive taxable income: ";
    cin >> income;
}
cout << "\n";
cout << "\nPlease press m if married and filing for a joint return, or s if filing for a single return: ";
cin >> smreturn;
            while (!(smreturn =="m") && !(smreturn =="M") && !(smreturn =="s") && !(smreturn =="S"))
{
    cout << "\nPlease press m if married and filing for a joint return,\n or s if filing for a single return: ";
    cin >> smreturn;
}

if (smreturn == "m" || "M")
{
    if (income >= 0 && income <= 1726)
    {
        taxedincome = income * .023;
    }
    if (income >= 1727 && income <= 3450)
    {
        taxedincome = (income - 1727) * .033 + 40;
    }
    if (income >= 3451 && income <= 5176)
    {
        taxedincome = (income - 3450) * .042 + 97;
    }
    if (income >= 5177 && income <= 6900)
    {
        taxedincome = (income - 5176) * .052 + 169;
    }
    if (income > 8626)
    {
        taxedincome = (income - 8626) * .07 + 362;
    }
        cout << "\nYour taxable income is:$" << (income);
cout << "\nAnd you are filing a joint return";
cout << "\nYour income tax will be:$" << (taxedincome);
cout << "\n";

}
if (smreturn == "s"||"S")
{
    if (income >= 0 && income <= 863)
    {
        taxedincome = (income * .023);
    }
    if (income >= 864 && income <= 1726)
    {
        taxedincome = (income - 863) * .033 + 20;
    }
    if (income >= 1727 && income <= 2588)
    {
        taxedincome = (income - 1726) * .042 + 48;
    }
    if (income >= 2589 && income <= 3450)
    {
        taxedincome - (income - 2588) * 0.052 + 85;
    }
    if (income >= 3451 && income <= 4313)
    {
        taxedincome - (income - 3450) * 0.06 + 129;
    }
    if (income > 4313)
        {
            taxedincome - (income - 4313) * 0.07 + 181;
}
        cout << "\nYour taxable income is:$" << (income);
cout << "\nAnd you are filing a single return";
cout << "\nYour income tax will be:$" << (taxedincome);
cout << "\n";
}
}           cout << "\n";
string returninfo;
if (smreturn == "s" || "S")
{
    returninfo == "single return";
}
else
{
    returninfo == "joint return";
}

system("PAUSE");
return 0;
}

Отображает информацию из обоих операторов If, сохраняя налогооблагаемый доход как единый возврат для совместного возврата.

Ответы [ 5 ]

3 голосов
/ 04 июля 2011

Ваше утверждение if неверно:

if (smreturn == "m" || "M")

Попробуйте:

if ((smreturn == "m") || (smreturn == "M"))

Та же проблема с этим утверждением:

if (smreturn == "s"||"S")

Исправьте этотак же.

3 голосов
/ 04 июля 2011
if (smreturn == "m" || "M")

должно быть

if ( (smreturn == "m") || (smreturn == "M") )

И подобные ошибки в немногих других условиях. Если вам нужно сравнить, вам нужно повторить его для каждого идентификатора в условии if.

1 голос
/ 04 июля 2011

Ваша ошибка в:

if (smreturn == "m" || "M")

Вам необходимо создать два условия при использовании ||(ИЛИ ЖЕ).Пример:

if (age == 15 || yearOfBirth == 1996) {
    std::cout << "Happy!" << std::endl;
} else {
    std::cout << "Sad!" << std::endl;
}

Вы можете использовать && (AND) в том же режиме.

Рекомендация:

Не использовать

using namespace std;

Не очень хорошая практика.Каждую функцию STD вы будете использовать

std::function

Пример:

std::cout << "Hello World" << std::endl;

"endl" - это буфер очистки и добавьте "\ n".

0 голосов
/ 04 июля 2011

Вы, вероятно, имели в виду:

if ((smreturn == "m") || (smreturn == "M"))

Оператор равенства проверяет равенство. Вы использовали его как своего рода тест на членство. Если было бы здорово, чтобы можно было написать

if (smreturn in ["m","M"])

но это прерогатива языков более высокого уровня.

0 голосов
/ 04 июля 2011

smreturn == "m" || "M" всегда верно, потому что "M" будет неявно преобразовано в true.

Вы, вероятно, хотите smreturn == "m" || smreturn == "M".

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