【问题标题】:Infinite Loop When Using Function Return Value as a Statement [duplicate]使用函数返回值作为语句时的无限循环[重复]
【发布时间】:2018-07-27 08:35:57
【问题描述】:

正在为基于文本的游戏制作一个小代码,但我试图做的想法与教程有点不同,以测试我的理解,但我试图获得一个函数值来做一个 do while 语句,但似乎是否声明 false 或 true 代码只是继续无限循环,我是一个初学者,所以如果你有时间请解释代码错误的原因,并提前谢谢你

主要功能

int main() {

    PrintIntroStart();
    do {
        PlayGame();
        AskToPlayAgain();
    } while (AskToPlayAgain() == true);
    return 0;
}

布尔函数

bool AskToPlayAgain(){
//Asking The Player Whether To Play Again Or Not
std::string PlayerResponse = "";

std::cout << "Do You Want To Play Again? (Yes/No)" << std::endl;
std::cin >> PlayerResponse;
if (PlayerResponse[0] == 'y' || 'Y') 
    return true;
else
    return false;
}

【问题讨论】:

  • 函数的最后四行应该是return (PlayerResponse[0] == 'y' || PlayerResponse[0] == 'Y')
  • 从循环中删除AskToPlayAgain();,你只需要在while (AskToPlayAgain());部分。

标签: c++ function loops do-while


【解决方案1】:

另外,在这里你要求再次播放两次

do {
    PlayGame();
    AskToPlayAgain();
   } while (AskToPlayAgain() == true);

这应该是

do {
    PlayGame();
} while (AskToPlayAgain() == true);

【讨论】:

  • 哦,我明白了,即使函数在语句中,c++ 仍然会先运行它而不是直接获取值是吗?
  • 是的,每次调用函数时它都会执行。
【解决方案2】:

if (PlayerResponse[0] == 'y' || 'Y')这个应该是

if (PlayerResponse[0] == 'y' || PlayerResponse[0] == 'Y') 

否则您的if 条件始终为真,因为'Y' 本身不为零。

实际上你不需要这个if 声明,只是

return PlayerResponse[0] == 'y' || PlayerResponse[0] == 'Y';

【讨论】:

  • " 因为 'Y' 本身不为零。" 我能问你这是什么意思吗?因为我认为代码会检查与预期匹配的 Ascii 值。但我可能错了
  • 抱歉 Nvm 我没有阅读底部答案
  • 请记住 C 不像自然语言。 PlayerResponse[0] == 'y' || 'Y' 这对人类来说可能是自然的,但不是编译器。对于编译器,这意味着 (PlayerResponse[0] == 'y') || 'Y'. Thus 'Y'` 与 PlayerResponse[0] 没有比较。
  • 为什么main函数中没有提到这个问题?你正在从 cmets 复制粘贴..
  • @EzizDurdyyev 请查看发帖时间,我的回答是 12:24:34,您的评论是 12:30:09。谁在抄袭?
【解决方案3】:

首先,您只需要每隔一局检查一次游戏的结果。 您应该按照@ziza s answer 并删除循环内的函数调用。

导致无限循环的第二个问题是您的输入检查。 c++ 中的布尔值不是单个位,而是另一个常规值,如果它为 0,则评估为 false,如果它具有任何其他值,则评估为 true。在您的情况下,如果玩家输入为“y”,则第一个比较将评估为 1,并且条件的第二部分将是“Y”字符的值(不是 0)。所以你的条件将永远是true,就像@liliscent stated

【讨论】:

    猜你喜欢
    • 2016-12-02
    • 2021-02-04
    • 2011-05-28
    • 1970-01-01
    • 2017-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多