2016-03-23 9 views
0

私のプログラム用の戦艦プログラムを作成しています。プログラムは正常に動作しますが、ユーザーが座標を範囲外に置いたときにプログラムが入力した座標が間違っていると言っているかどうかを確認しようとしています。これはコードです:ifステートメントを組み込んで値の制限を設定する

#include <stdio.h> 
    #include <stdlib.h> 

    void startBoard(int board[][5]) 
{ 
    int line, column; 
    for(line=0 ; line < 5 ; line++) 
     for(column=0 ; column < 5 ; column++) 
      board[line][column]=-1; 
} 

void showBoard(int board[][5]) 
{ 

int line, column; 

    printf("\t1 \t2 \t3 \t4 \t5"); 
    printf("\n"); 

    for(line=0 ; line < 5 ; line++){ 
     printf("%d",line+1); 
     for(column=0 ; column < 5 ; column++){ 
      if(board[line][column]==-1){ 
       printf("\t~"); 
      }else if(board[line][column]==0){ 
       printf("\t*"); 
      }else if(board[line][column]==1){ 
       printf("\tX"); 
      } 

     } 
     printf("\n"); 
    } 

} 

void startShips(int ships[][2]){ 
    srand(time(NULL)); 
    int ship, last; 

    for(ship=0 ; ship < 3 ; ship++){ 
     ships[ship][0]= rand()%5; 
     ships[ship][1]= rand()%5; 
for(last=0 ; last < ship ; last++){ 
      if((ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1])) 
       do{ 
        ships[ship][0]= rand()%5; 
        ships[ship][1]= rand()%5; 
       }while((ships[ship][0] == ships[last][0])&&(ships[ship][1] == ships[last][1])); 
     } 

    } 
} 

void giveShot(int shot[2]) 
{ 

    printf("Line: "); 
    scanf("%d",&shot[0]); 
    shot[0]--; 

    printf("Column: "); 
    scanf("%d",&shot[1]); 
    shot[1]--; 

} 

int hitship(int shot[2], int ships[][2]) 
{ 
    int ship; 

    for(ship=0 ; ship < 3 ; ship++){ 
     if(shot[0]==ships[ship][0] && shot[1]==ships[ship][1]){ 
      printf("You hit a ship with the shot (%d,%d)\n",shot[0]+1,shot[1]+1); 
      return 1; 
     } 
    } 
    return 0; 
} 

void tip(int shot[2], int ships[][2], int attempt) 
{ 
    int line=0, 
     column=0, 
     row; 

    //count how many ships there is line/column 
    for(row=0 ; row < 3 ; row++){ 
     if(ships[row][0]==shot[0]) 
      line++; 
     if(ships[row][1]==shot[1]) 
      column++; 
    } 

    printf("\nDica %d: \nline %d -> %d ships\ncolumn %d -> %d ships\n",attempt,shot[0]+1,line,shot[1]+1,column); 
} 

void changeBoard(int shot[2], int ships[][2], int board[][5]){ 
    if(hitship(shot,ships)) 
     board[shot[0]][shot[1]]=1; 
    else 
     board[shot[0]][shot[1]]=0; 
} 

int main() { 
    int board[5][5]; 
    int ships[3][2]; 
    int shot[2]; 
    int attempts=0, 
     hits=0; 

    startBoard(board); 
    startShips(ships); 

    printf("\n"); 

    do{ 
     showBoard(board); 
     giveShot(shot); 
     attempts++; 

     if(hitship(shot,ships)){ 
      tip(shot,ships,attempts); 
      hits++; 
     } 
     else 
      tip(shot,ships,attempts); 

     changeBoard(shot,ships,board); 


    }while(hits!=3); 

    printf("\n\n\nFinished game. You hit the three ships in %d attempts", attempts); 
    showBoard(board); 
} 
+2

あなたは何を試しましたか?適切な場所に 'if'文を挿入できないのはなぜですか? –

答えて

2

私はwhile文がifよりも有用であろうと思います。

まず、ユーザーに値を入力するように依頼します。その後、ユーザーが間違った値を入力すると、彼に再度尋ねられます。

それは次のようになります。あなたは本当にあなたがifwhileを変更することができifが必要ですが、while文をチェックし続けるのに対し、あなたは何を得るまで、それは一度だけ値をチェックしたい場合

printf("Line: "); 
scanf("%d",&shot[0]); 
while(shot[0]<lower_bound || shot[0]>upper_bound){ 
    printf("Incorrect entry"); 
    printf("Enter a correct Line: "); 
    scanf("%d",&shot[0]); 
} 
shot[0]--; 

あなたが必要です。

+0

@megasxrlこの回答が役に立ちましたか?どんなフィードバック? –

関連する問題