2013-07-05 78 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

這是有用的謝謝你,我會投票了這個答案,但我的聲譽是低:( –