2013-07-05 148 views
-1

这可能是一个非常新手的问题,但我只是在练习C++的类,并且似乎无法在while循环结束时执行此操作以在布尔条件下结束。如何在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; 
} 
+0

基本逻辑。 **在阅读我的答案之前,先想想**,你会明白的。 – 2013-07-05 11:03:47

+0

无限循环不会结束。 – devnull

+1

除了其他答案,您希望在选择> 0 *和*选择<3时循环,而不是*或* –

回答

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

这将设置endgame为真时,退出条件满足,则回送,因为你检查endgame真正不虚。你想

} while (!endgame); 

改为。

+0

这使得它的工作,非常感谢,你的生活节省。 –

+1

@Benjamin:作为一个有用的提示,试着大声读出来,以确保它是有道理的。在这种情况下,'do {/ * ... something ... * /} while(!endgame);'应该看起来像“在游戏没有结束时做些事情”,这非常合理。 (并且在循环中,'if(condition)endgame = true;'应该被读取,如果条件发生,则结束游戏“) – Boris

0

这里:

if(endgame) break; 

尝试把,在你的循环结束。

0

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

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

由于您使用OR||):

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

因此,对于choice(不管endgame的值)的任何值,循环将始终保持不变。

此外,循环将继续(而不是停止),而endgametrue,这是因为choice给出的不是1或2

值如果您尽快把它&&)和反向endgame检查,它应该工作:

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

但真的choice > 0 && choice < 3 &&是不必要的,因为你设置endgame一旦这些条件成立。

while (endgame == false); 

这可以简化为:

while (!endgame); 
+0

您在符号列表之后的结论是正确的*,但*项目符号列表中的示例是不够好(例如,他们不考虑“选择”为2)。 –

+0

@ R.MartinhoFernandes足够公平,编辑。 – Dukeling

+0

这是有用的谢谢你,我会投票了这个答案,但我的声誉是低:( –