2

私は次のようなものを持っています

   while(playAgain==true)
   {
      cout<<"new game"<<endl; //i know 'using namespace std;' is looked down upon
      while(playerCard!=21)
      {
          *statements*
          if(decision=='n')
          {
              break
          }
       ...
      }
   }

しかし、そのブレークは、両方のループから抜け出したいときに最初の while ループから抜け出すだけです

4

6 に答える 6

8

スパゲッティを調理してループを関数に抽出

void foo(...) {
    while (...) {
        /* some code... */
        while (...) {
            if ( /* this loop should stop */ )
                break;
            if ( /* both loops should stop */ )
                return;
        }
        /* more code... */
    }
}

この分解により、何百行もの見苦しい手続き型コードの代わりに、さまざまな抽象化レベルできちんとした関数が得られるため、よりクリーンなコードが生成されます。

于 2013-09-07T05:24:40.803 に答える
2

行くには基本的に2つのオプションがあります。

  1. 外側のループに条件チェックを追加します。

    while ((playAgain==true) && (decision != '\n'))

  2. を使用するだけgotoです。goto魔物のように使うなとよく言われる。しかし、私はそれを使用して複数のループを終了することに反対していません。この状況では、それはきれいで明確です。

于 2013-09-07T05:26:40.890 に答える
1
 while(playAgain==true && decision !='n' ){
                           ^^ add a condition
      cout<<"new game"<<endl; 
      while(playerCard!=21){
      *statements*
      if(decision=='n'){
          break
         }
     ...
      }
 }
于 2013-09-07T05:26:05.257 に答える
1

Gotoを使う:

   while(playAgain==true)
   {
      cout<<"new game"<<endl; //i know 'using namespace std;' is looked down upon
      while(playerCard!=21)
      {
          *statements*
          if(decision=='n')
          {
              goto label;
          }
       ...
      }
   }
   label: 
   ...    
于 2013-09-07T05:27:22.613 に答える
0

この解決策は、あなたのケースに固有のものです。ユーザーの決定が「n」の場合、ユーザーは再びプレイしたくありません。したがって、設定playAgainfalseてからブレークするだけです。外側のループは自動的に壊れます。

while(playAgain==true){
   cout<<"new game"<<endl; //i know 'using namespace std;' is looked down upon
   while(playerCard!=21){
      *statements*
      if(decision=='n'){
         playAgain = false; // Set this to false, your outer loop will break automatically
         break;
      }
   }
}
于 2013-09-07T05:26:50.047 に答える
0

gotoステートメントを避ける必要がない場合は、次のように書くことができます

while (a) {
    while (b) {
        if (c) {
            goto LABEL;
        }
    }
}
LABEL:
于 2013-09-07T05:30:57.367 に答える