这可能是一个非常新手的问题,但我只是练习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;
}
答案 0 :(得分:4)
由于您使用的是 OR (||
):
0 < choice < 3
,由于choice > 0
和choice < 3
都为真,循环显然会继续,这就是我们想要的。choice >= 3
(比如10),循环将继续,因为choice > 0
为真choice <= 0
(比如-1),循环将继续,因为choice < 3
为真。因此,循环将始终为choice
的任何值继续(无论endgame
的值如何)。
此外,当endgame
为true
时,循环将继续(而不是停止),只要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)