2017-03-02 9 views
0

私はC++を学び始めました.2つのコードの違いについて基本的な質問があります。C++、Do Whileコードの違い

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

私の質問は、私が使用して同じ結果を達成していることである:これは、教育ビデオで提示された方法でゲームを再起動して

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

を両方達成したときにプレーヤーの入力をはいであれば他の何かが入力された場合、彼は再びプレイしたい、または停止したい。 2番目のものを使用する際に望ましくない副作用はありますか?

+2

実際にビデオのようなコードをフォーマットしましたか?それはかなり衝撃的です。 –

+2

ユーザーがもう一度再生したい場合、あなたのバージョンでイントロが印刷されません。 – Rakete1111

+0

ありがとうございました、私は今理解しています。そして、彼らはビデオのようにそれをフォーマットしない、それは私のsloppiness、申し訳ありません。 –

答えて

0

2番目のバージョンでは、すべてのループにIntroが出力されません。それ以外の場合は、whileパラメータとしてAsktoPlayAgain()を呼び出すという副作用はありません。

私はそのバージョン1に、質問した後、再生する前に何かできることを追加しました。たとえば:

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

唯一の副作用は、2番目のコードスニペットでは、PrintIntro()関数が1回だけ呼び出されることです。ユーザーが再びプレイすることを決定するたびに呼び出されることはありません。

4

は、二つの方法の間に2つの機能的な違いがあります。第二版では

  1. は、PrintIntroは()だけですべての試合前に一度ではなく、呼び出されます。
  2. AsktoPlayAgainは、最初の値で0以外の値を返すことはできますが、2番目の値では1だけ戻すことができます。 (AsktoPlayAgainが0または1しか返さない場合、これはまったく違いがありません)。
0

は、私が見る唯一の望ましくない副作用は

  • PrintIntroは()のみ最初に呼び出されます。プレイヤーが再プレイを決定した場合、再実行されません。しかし、これはあなたの意図かもしれません。
  • boolwhileののintにキャストすると、一部のシステムで問題が発生します。 AskToPlayAgainはboolを返しますが、1はintです。その文をwhile(AskToPlayAgain());に置き換えて、boolが返されるので、問題なく同じ効果を達成することができます。