使用函数返回值作为语句时的无限循环

时间:2018-02-16 12:23:10

标签: c++ function loops do-while

正在为基于文本的游戏制作一个小代码,但我尝试做的思考与教程类型有点不同,以测试我的理解但我试图获得一个函数值来做一个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;
}

3 个答案:

答案 0 :(得分:3)

另外,在这里你要两次再玩一次

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

这应该是

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

答案 1 :(得分:2)

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

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

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

事实上,您不需要此if声明,只需

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

答案 2 :(得分:0)

首先,你只是每隔一秒钟检查游戏的结果。 您应该关注@ziza s answer并删除循环内的函数调用。

导致无限循环的第二个问题是输入检查。 c ++中的bool值不是单个位,而只是一个常规值,如果它是0则评估为false,如果它有任何其他值则评估为true。在你的情况下,如果玩家输入是&#39; y&#39;那么第一次比较将变为1。条件的第二部分将是&#39; Y&#39;字符(不是0)。因此,您的情况将始终为true,就像@liliscent stated一样。