2016-09-03 3 views
-2

あなたの多くはチックタックのつま先の質問に疲れていると確信していますが、私はこの部分が意図したとおりに機能しない理由についての洞察力を感謝します。スマートコンピュータティックタックトゥーCの選択を移動

残りのコードはうまくいきますが、ここではコンピュータが動かず、代わりにボードを再表示してユーザーの動きに戻ります。

ユーザーとコンピュータのマークが機能に引き継がれているが、選択プロセスが機能していないことを確認しました。デフォルトでは、forループが実行され、そこから他の関数​​が続行されますが、コンピュータのマークは割り当てられません。

私はすでに次の移動に送信される前にボードがいっぱいでないことを確認するコードを持っています。

これは代入比較ではありませんあなた

void cmove(char umark, char cmark) 
{ 
    int i=0; 
    if((board[4] == NULL)) 
    { 
     board[4] == cmark; 
     DisplayBoard(); 
     cwin(umark , cmark); 
    } 
    if((board[0] != NULL) && (board[1] != NULL) && (board[2] != NULL) && (board[3] != NULL) && (board[4] == umark) && (board[5] != NULL) && 
     (board[6] != NULL) && (board[7] != NULL) && (board[8] != NULL)) 
     { 
      board[0]= cmark; 
      DisplayBoard(); 
      cwin(umark ,cmark); 
     } 
    for(i=0; i<9; i++) 
    { 
     if(board[i] == NULL) 
     { 
      board[i] == cmark; 
      DisplayBoard(); 
      cwin(umark, cmark); 
      i=9; 
     } 
    } 
} 
+0

実際にどのコードパスが実行されているかを確認するために、既にデバッグを試したことはありますか?アプリケーションが期待どおりに動作しない場合は、まずプログラムをデバッグし、その理由を調べる必要があります。 – maja

+2

これらの「NULL」は何ですか?あなたのボードはポインタの配列ですか?完全なコンパイラの警告が有効になっていることを確認してください。 –

+2

'board [4] == cmark;'は間違いです。コンパイラが警告していたはずです。また、 'board [i] == cmark;'。 '=='を '='に変更してください。 –

答えて

1

をありがとう:あなたはすべての警告に最初の条件ブロックにboard[4] == cmark;

電源を入れて同様の問題を抱えている

board[i] == cmark; 

あなたコンパイラはこの種の間違いをキャッチすることができます。

+0

私はその愚かな過ちをしたとは信じられません。コードは依然としてforループを好んでいますが、私はそれがなぜ分かりません。 –

+0

私は今、それを修正することができました、ありがとう! –

0
board[4] == cmark; 

これは比較であり、何の効果もありません。

board[4] = cmark; 
関連する問題