如果语句表达式调用函数,则需要测试是否为真

问题描述 投票:0回答:1

我正在为我的一个大学班级分配作业,并且遇到了一个“问题”,如果我在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++ function callback expression do-while
1个回答
0
投票

即使函数调用位于if语句内部,该函数仍将被调用。我不太确定Adventure()中的do-while循环的用途是什么,但是我建议您这样做:

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

这样,每个循环迭代仅调用一次该函数。希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.