首页 > 解决方案 > if语句表达式调用函数,需要测试是否为真

问题描述

我正在为我的一门大学课程做作业,我遇到了一个“问题”,如果我在 if 语句/while 循环的表达式中使用函数,它会调用函数而不是提供布尔值。我需要检查这个函数的值是否等于所需的值。我确信这是一个预期的功能,但我们还没有被教导如何正确检查这一点,我已经能够找到对上述操作的任何参考。任何帮助表示赞赏。

string askYesNo(string question)
    {
        string playerChoice;
        do
        {
            cout << question << " (YES/NO)" << endl;
            cin >> playerChoice;
            for (int i = 0; i < playerChoice.size(); i++)
            {
                playerChoice[i] = toupper(playerChoice[i]);
            }
        } while (playerChoice != "YES" && playerChoice != "NO");
        return playerChoice;
    }

void adventure()
{
    if (askYesNo("You see a pile of gold in front of you. Do you want it?") == "YES")
    {
        cout << "As you approach, it moves forward and attacks you!\n";
        do
        {
            askYesNo("\nDo you want to continue to battle?");
        } while (askYesNo("\nDo you want to continue to battle?") == "YES");// WHY DOES THIS CALL THE FUNCTION?
    }
    else
    {
        cout << "Okay, cool.";
    }

    return;
}

期望测试函数是否为真。实际结果,它调用函数,导致函数被调用两次。

标签: c++functioncallbackexpressiondo-while

解决方案


即使函数调用在 if 语句中,该函数仍然会被调用。我不完全确定 Adventure() 中的 do-while 循环的目的是什么,但这是我的建议:

    std::string answer;
    do
    {
        answer = askYesNo("\nDo you want to continue to battle?");
    } while (answer == "YES");

这样,该函数每次循环迭代只会被调用一次。希望这可以帮助。


推荐阅读