2016-06-21 13 views
2

私はループ中にこれを終了するように見えません。私は知っているすべての方法を試しましたが、まだ動作していません。変数 "contGame"はすでに "false"に変更されていても "true"に変化し続けています。あなたは私を助けることができます!これはクラスの内部にあることに注意してください。ここに私のコードです:whileループを終了できません(C++)

while (contGame == true) 
    { 
     if (turn == 1) 
     { 
      cout << Board._player1Name <<"'s turn!!\n"; 
      X = getMoveX(); 
      Y = getMoveY(); 

      Board.Board[X][Y] = player1Sign; 
      Board.printBoard(); 
      turn = turn + 1; 
      Board.checkGame(contGame, player1Sign, player2Sign); 
      if (checkGame(contGame, player1Sign, player2Sign) == false) 
      { 
       bool contGame = false; 
       cout << contGame << endl; 
      } 
     } 
     cout << contGame << endl; 
     if(turn == 2) 
     { 
      cout << Board._player2Name <<"'s turn!!\n"; 
      X = getMoveX(); 
      Y = getMoveY(); 

      Board.Board[X][Y] = player2Sign; 
      Board.printBoard(); 
      turn = turn - 1; 
      Board.checkGame(contGame, player1Sign, player2Sign); 
      if (checkGame(contGame, player1Sign, player2Sign) == false) 
      { 
       int contGame = 1; 
       cout << contGame << endl; 
      } 
     } 
    } 

そして、これはcheckGameです:

bool contGameA = true; 
for (int k = 0; k < 3; k++) 
    { 

     if (Board[k][0] == Board[k][1] && Board[k][1] == Board[k][2] && Board[k][2] == player1Sign) 
     { 
      cout << "\\\\" << _player1Name <<" wins!////\n"; 
      contGameA = false; 
     } 
     else if (Board[k][0] == Board[k][1] && Board[k][1] == Board[k][2] && Board[k][2] == player2Sign) 
     { 
      cout << "\\\\" << _player2Name << " wins!////\n"; 
      contGameA = false; 
     } 
    } 

for (int r = 0; r < 3; r++) 
    { 
     if (Board[0][r] == Board[1][r] && Board[1][r] == Board[2][r] && Board[2][r] == player1Sign) 
     { 
      cout << "\\\\" << _player1Name << " wins!////\n"; 
      contGameA = false; 
     } 
     else if (Board[0][r] == Board[1][r] && Board[1][r] == Board[2][r] && Board[2][r] == player2Sign) 
     { 
      cout << "\\\\" << _player2Name << " wins!////\n"; 
      contGameA = false; 
     } 
    } 

if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[2][2] == player1Sign) 
    { 
     cout << "\\\\" << _player1Name << " wins!////\n"; 
     contGameA = false; 
    } else if (Board[0][0] == Board[1][1] && Board[1][1] == Board[2][2] && Board[2][2] == player2Sign) 
    { 
     cout << "\\\\" << _player2Name << " wins!////\n"; 
     contGameA = false; 
    } 

if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[2][0] == player1Sign) 
    { 
     cout << "\\\\" << _player1Name << " wins!////\n"; 
     contGameA = false; 
    } else if (Board[0][2] == Board[1][1] && Board[1][1] == Board[2][0] && Board[2][0] == player2Sign) 
    { 
     cout << "\\\\" << _player2Name << " wins!////\n"; 
     contGameA = false; 
    } 
return contGameA; 
+2

を置きます「最小」部分のために。転記する前に、可能な限りコードを短くする必要があります(もちろん、エラーを再現してください)。 – Angew

答えて

2

は、あなたが実際にあなたのif文のネストされた範囲内contGame変数を作成しているし、これは外側のスコープで宣言さcontGame変数を隠しています。 その結果、外部contGameの変数は決して変更されません。

if (checkGame(contGame, player1Sign, player2Sign) == false) 
{ 
    // bool contGame = false; should be: 
    contGame = false; 
    cout << contGame << endl; 
} 

if (checkGame(contGame, player1Sign, player2Sign) == false) 
{ 
    // int contGame = 1; should be 
    contGame = true; 
    cout << contGame << endl; 
} 
+0

"bool"と "int"を削除しましたが、ループはまだ終了しません。どんな考え? –

1

あなたは、ネストされたスコープ内の名前contGameで新しい変数を宣言し、それらを修正しておきます。これらは完全に別個の変数で、(範囲内で)外部変数contGameを非表示にします。それは外側のの値がwhileのループに依存します。

ラインからboolintを削除します。これらの行は、外側contGame変数に影響を与える持っている

bool contGame = false; 

// and 

int contGame = 1; 

1trueに変換されます。

0

変数のスコープは、任意のループ内で宣言されている場合にのみ、角括弧内に入ります。 私が質問に答えるんでしたが、私はあなたが投稿コードの壁に誤りを発見するために起こっているため、あなたの質問には遠く[MCVE]を提供するからであることに注意してください、boolintを削除し、ちょうど

if (checkGame(contGame, player1Sign, player2Sign) == false) 
{ 
contGame = false; 
} 
関連する問題