2016-12-07 9 views
0

私は戦艦プログラムを作ろうとしています。これまでのところ、私のプログラムはユーザー1に船のどこを入力するかを尋ねます。次にユーザー2は、船がどこにあるかを推測します。戦闘中のwhileループで問題が発生しました

初めてプレイヤー1のすべての船に当たったことがなければ、私のプログラムはユーザー2を再プロンプトしようとしました。

私はいくつかのスポットでwhileループを入れてみましたが、プログラムがクラッシュするたびにwhileループが現れてクラッシュしました。何も動作していないようです。

#include <stdio.h> 

int main(void) 
{ 
    int board[2][2]; 
    int i, j; //initialize loop variables 
    int i2, j2; //initialize 2nd loop variables 
    int i3, j3; // 3rd loop variables 

    printf(" User 1: Enter a '1' where you want to place your ship and '0' where you do not.\n"); 

    /* these loops prompt the user to enter a 0 or 1 for each space in the 2d array depending on where they want their ship*/ 
    for(i = 0; i <= 1 ; i++) 
    { 
     for(j = 0 ; j <= 1 ; j++) 
     { 
      printf("space[%d][%d]: ", i, j); 
      scanf("%d", &board[i][j]); 
     } 
    } 

    while(board[i][j] == 1) 
    { 
     /*used to prompt the user2 as long as user1 still has ships left*/ 
     int board2[2][2]; 
     printf("User 2: Enter a '1' where you think User 1 placed their ship and '0' where \nyou do not.\n"); 

     /* Asks user2 for their guesses */ 
     for(i2 = 0 ; i2 <= 1 ; i2++) 
     { 
      for(j2 = 0 ; j2 <= 1 ; j2++) 
      { 
       printf("space[%d][%d]:", i2, j2); 
       scanf("%d", &board2[i2][j2]); 
      } 
     } 

     for(i3 = 0 ; i3 <= 1 ; i3++) 
     { 
      //compares user1 input to user2 guess 
      for(j3 = 0 ; j3 <= 1 ; j3++) 
      { 
       if(board[i3][j3] == 1 && board2[i3][j3] == 1) 
       { 
        printf("Hit!\n"); // if the inputs match display "hit" 
        board[i][j] = 0; 
       } 
       else 
       { 
        printf("Miss!\n"); // if no hit display miss 
       } 
      } 
     } 
    } 

    return 0; 
} 
+0

while(board [i] [j] == 1){':境界外へのアクセス。私は役に立たないコードだと思います。 – BLUEPIXY

+0

while(board [i] [j] == 1){:私はその部分が役に立たないことに同意しますが、ユーザ2に再度プロンプトを出すためにwhileループをどこに置くべきかわかりません。 – nicky

+0

User2は、船の位置。そしてそれを判断する。 – BLUEPIXY

答えて

0

私が思うには、戦艦プログラムのルールを1として、我々は、ランダムに配置された船を見つけるために、ユーザーのためのいくつかの制限を指定しました。ユーザーが有効な応答を入力しなかった場合、有効な応答が入力されるか、またはその限界が交差するまで、このプロセスが繰り返されます。

あなたの場合、user2がすべての船を無制限に見つけるまで、このプロセスを繰り返す必要があります。

私はあなたのコード内でいくつかの問題を観察しています: -

  1. と仮定user1が1 0 1 0を与え、User2が1 1 1 1を与えるあなたが完全な戦闘ボードを検索しているので、あなたのプログラムが成功した結果が得られますユーザー2入力。
  2. [2] []にボードがゼロの値を含むまで、User2は連続して実行されます。船を見つけるためにuser2のための制限をしてください

    1. : - あなたのプログラムの設計を変更する

    いくつかのポイント。

  3. user2入力で完全なマトリックスを検索しないでください。ただし、あなたのバトルボードのインデックスをuser2入力でチェックしてください。

挑戦のためのベスト。

関連する問題