C ++ вложенный if statments, basi c обмен валюты - PullRequest
1 голос
/ 10 июля 2020

У меня простая проблема C ++ с моими операторами if: программа запускает значения как начальные параметры if, а не выполняет else if. Также я попытался написать код так, чтобы, если результат функции был равен 1, он вводил грамматически правильный оператор, есть ли лучший способ сделать это, кроме использования другого оператора if?

int main()
{
cout << "Please type out amount and currency type to convert to dollars.\n";
double val1;
string currency;
double result = 0;
cin >> val1 >> currency;
if (currency == "yen" || "y")
{
    result = val1/100;
    if (result == 1) {
        cout << "You have " << val1 << "yen which equals \n"
            << result << ", dollar.";
    }
    else
    cout << "You have " << val1 << "yen which equals \n"
        << result << ", dollars.";
}
else if (currency == "euros" || "e")
{
    result = val1*1.25;
    if (result == 1) {
        cout << "You have " << val1 << "euros which equals \n"
            << result << ", dollar.";
    }
    else
        cout << "You have " << val1 << "euros which equals \n"
        << result << ", dollars.";
}
else if (currency == "pounds" || "p")
{
    {
        result = val1 *1.2;
        if (result == 1) {
            cout << "You have " << val1 << "pounds which equals \n"
                << result << ", dollar.";
        }
        else
            cout << "You have " << val1 << "pounds which equals \n"
            << result << ", dollars.";
    }
}
else
    cout << "I didn't understand, please try again.\n";
}

1 Ответ

4 голосов
/ 10 июля 2020

Когда вы набираете if (currency == "yen" || "y"), вы, вероятно, хотите, чтобы это означало «если currency равно "yen" или если оно равно "y", сделайте что-нибудь».

Однако это это не то, что на самом деле делает ваш оператор if. Оператор if

if (currency == "yen" || "y")

сначала проверяет, равна ли строка currency "yen", а если нет, то вычисляет "y" самостоятельно и проверяет, соответствует ли она равно true.

В этом случае «y» будет усечено до bool, что означает, что оно будет оцениваться как true (потому что "y" не равно 0). В результате ваш первый if-оператор будет всегда оценивается как истина!

Чтобы исправить это, замените свой if-оператор на if (currency == "yen" || currency == "y").

Для своего второго вопроса вы можете использовать условный оператор, который работает так:

cout << "You have " << (val1 == 1 ? "thing" : "things") << endl;

Условным условием в этом случае является (val1 == 1 ? "thing" : "things"). Он проверяет наличие val1 == 1, затем возвращает "thing", если это true, и "things" в противном случае.

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