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

时间:2019-10-09 03:49:37

标签: c++ function callback expression do-while

我正在为我的一个大学班分配一项作业,并且遇到一个“问题”,如果我在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;
}

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

1 个答案:

答案 0 :(得分:1)

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

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

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