2017-03-02 55 views
0

我剛剛開始學習C++,並且對兩個代碼之間的區別有一個基本的問題。這是它在教學視頻呈現的方式:C++,Do雖然代碼差異

int main() 
{ 
    bool bPlayAgain = false: 
    do { 
     PrintIntro(); 
     PlayGame(); 
     bPlayAgain = AsktoPlayAgain(); 
    } 
    while(bPlayAgain); 
    return 0; 
} 

我的問題是,我已經實現了使用相同的結果:

int main() 
{ 
    PrintIntro(); 
    do { 
     PlayGame(); 
    } 
    while (AskToPlayAgain() == 1); 
    return 0; 
} 

兩個實現重啓遊戲中當玩家輸入yes如果如果輸入了其他內容,他想再次玩或停止。使用第二個產品時是否有不必要的副作用?

+2

他們是否真正格式化了視頻中的代碼?這非常令人震驚。 –

+2

如果用戶想再次播放,則您的版本不會打印介紹。 – Rakete1111

+0

謝謝大家的幫助,我現在明白了。沒有,他們不會像視頻中那樣格式化,這將是我的懶散,對不起。 –

回答

0

第二個版本不打印每個循環的介紹。除此之外,調用AsktoPlayAgain()作爲while參數沒有副作用。

我想補充一點,版本1有額外的好處,你可以做的東西后問,但在重放之前。例如:

int main() 
{ 
    bool bPlayAgain = false: 
    do { 
     PrintIntro(); 
     PlayGame(); 
     bPlayAgain = AsktoPlayAgain(); 
     if(bPlayAgain){ 
     ShowReload(); 
     } 
    } 
    while(bPlayAgain); 
    return 0; 
} 
6

我看到的唯一副作用是在第二個代碼片段中,PrintIntro()函數只會被調用一次。每次用戶決定再次播放時都不會被調用。

4

有兩種方法之間有兩個功能差異:

  1. 在第二個版本,PrintIntro()只會每場比賽之前調用一次,而不是。
  2. AsktoPlayAgain可以返回第一個非零值,但它只能在第二個返回1。 (如果AsktoPlayAgain只返回0或1,則根本沒有差別。)
0

只有不必要的副作用,我看到的是

  • PrintIntro()只調用開頭。如果玩家決定再次玩,它不會重新執行。雖然,這可能是你的意圖。
  • 當您在while聲明中輸入boolint時,您在某些系統上遇到問題:while(AskToPlayAgain() == 1);。 AskToPlayAgain返回bool,但1是int。您可以用while(AskToPlayAgain());替換該語句,並且由於返回bool而獲得相同效果而沒有問題。