如何在循环时结束此操作?

时间:2013-07-05 11:01:05

标签: c++ loops conditional-statements do-while

这可能是一个非常新手的问题,但我只是练习C ++的类,并且似乎无法在循环结束时以布尔条件结束。

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 个答案:

答案 0 :(得分:4)

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

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

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

此外,当endgametrue时,循环将继续(而不是停止),只要choice的值为&&,就会设置不是1或2。

如果您将其设为 AND endgame)并反转while (choice > 0 && choice < 3 && endgame == false); 检查,则应该有效:

choice > 0 && choice < 3 &&

但实际上endgame是不必要的,因为一旦这些条件成立,您就会设置while (endgame == false);

while (!endgame);

这可以简化为:

{{1}}

答案 1 :(得分:3)

do {
    if (exit_condition)
        endgame = true;
} while (endgame == true);

这会在满足退出条件时将endgame设置为true,然后循环返回,因为您检查endgame true 而不是false。你想要

} while (!endgame);

代替。

答案 2 :(得分:0)

下面:

if(endgame) break;

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

答案 3 :(得分:0)

只要您的endgame为false,您想要保持循环,所以您只需要在while语句中更改您的测试,如下所示:

while (choice > 0 || choice < 3 || endgame == false)