c++ - 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;
}
期望测试函数是否为真。实际结果,它调用函数,导致函数被调用两次。
解决方案
即使函数调用在 if 语句中,该函数仍然会被调用。我不完全确定 Adventure() 中的 do-while 循环的目的是什么,但这是我的建议:
std::string answer;
do
{
answer = askYesNo("\nDo you want to continue to battle?");
} while (answer == "YES");
这样,该函数每次循环迭代只会被调用一次。希望这可以帮助。
推荐阅读
- snowflake-cloud-data-platform - 三秘密的好处
- sql-server - 在 ROW_NUMBER() OVER ( ORDER BY ) 中使用 case 语句会导致严重的性能问题
- c++ - 编译器错误。编译的 c++ .exe 是 16 位的
- kubernetes - K8s 从正在运行的集群中取回我的 yaml 文件
- google-apps-script - 将变量值放入特定单元格
- c++ - 为什么 VS 看不到包含的文件?
- linux - Bash 脚本:带有命令替换的`cd`
- amazon-web-services - 如何通过主机名而不是地址连接到 Kubernetes 服务?
- vue.js - Nuxt 内容:如何从 markdown/yaml 链接到二进制文件?
- linux - 用于 Linux 触摸移动操作系统的 ElectronJS?