0

这可能是一个非常新手的问题,但我只是在练习 C++ 的课程,似乎无法让这个 do while 循环在布尔条件下结束。

int main()
{
    bool endgame = false;
    string x;
    int choice;
    cout << "please choose the colour you want your bow to be:\n";
    cin >> x;
    Bow bow1(x);
    do
    {
        cout << "please choose what you would like to do\n";
        cout << "(1 draw bow\n(2 fire bow\n(3 end game";
        cin >> choice;

        if (choice == 1)
        {
            bow1.Draw();
        }
        else if (choice == 2)
        {
            bow1.Fire();
        }
        else
        {
            endgame = true;
        }
    }
    while (choice > 0 || choice < 3 || endgame == true);
    return 0;
}
4

4 回答 4

4

由于您使用的是OR ( ||):

  • 如果0 < choice < 3,循环显然会继续,因为两者choice > 0choice < 3都是真的,这就是我们想要的。
  • 但是,如果choice >= 3(比如 10),循环将继续,因为choice > 0它是真的
  • 如果choice <= 0(比如-1),循环将继续,因为choice < 3它是真的。

因此,对于任何值choice(无论endgame' 值如何),循环将始终继续。

此外,循环将继续(而不是停止) while endgameis true,一旦choice给定一个非 1 或 2 的值,就会设置它。

如果您进行AND ( &&) 并反转endgame检查,它应该可以工作:

while (choice > 0 && choice < 3 && endgame == false);

但实际上这是不必要的,因为一旦这些条件中的任何一个成立,choice > 0 && choice < 3 &&您就可以设置。endgame

while (endgame == false);

这可以简化为:

while (!endgame);
于 2013-07-05T11:09:54.423 回答
3
do {
    if (exit_condition)
        endgame = true;
} while (endgame == true);

This will set endgame to true when the exit condition is met, then loop back, because you check for endgame being true and not false. You want

} while (!endgame);

instead.

于 2013-07-05T11:03:29.317 回答
0

这里:

if(endgame) break;

尝试将其放在循环的末尾。

于 2013-07-05T11:04:46.873 回答
0

你想要的是只要你endgame是假的就留在循环中,所以你只需要像这样在while语句中更改你的测试:

while (choice > 0 || choice < 3 || endgame == false)
于 2013-07-05T11:07:03.270 回答