2016-10-14 12 views
0

私は地雷板ボードを印刷しようとしています。正しい文字配列が印刷されていないC

現在のところ、爆弾の位置は隣接する爆弾の数ではなく、0の位置しか表示されません。私はそれが私の中括弧の位置と関係があると思うが、私は確信していない。

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

int main() { 
    int width, tall, W; 
    int T=1; 
    int g; 
    int c=0; 
    printf("How wide do you want your board?\n Max 32 squares\n"); 
    scanf("%d",&width); 
    printf("How tall do you want your board?\n Max 32 squares\n"); 
    scanf("%d",&tall); 
    printf("How many mines do you want?\n Between 0 and 1000 please\n"); 
    scanf("%d",&W); 
    int y= tall*width; 
    if (width>32 || width <=0 || tall>32 || tall <=0) 
     { 
      printf("Error, not valid dimensions\n"); 
      T=0; 
     } 
    if (W>1000 || W<0 || W>(tall*width)) 
     { 
      printf("Error, not a valid amount of mines\n"); 
      T=0; 
     } 
    if (T==0) 
     { 
      printf("Sorry, you cannot play Mine sweeper!\n"); 
     } 
    char array[tall][width]; 
    int i,j; 
    if (T==1) 
     { 
      for(i=0;i<tall;i++) 
       { 
        for(j=0;j<width;j++) 
         { 
          g=rand() % y; 
          if (g<=W) 
           { 
            array[i][j]='*'; 
           } 
          if(g>W) 
           { 
            array[i][j]='0'; 
           } 
         } 
       } 

      for(i=0;i<tall;i++) 
       { 
        for(j=0;j<width;j++) 
         { 
          if(array[i][j]==0) 
           { 
            if(array[i-1][j-1]=='*') 
             { 
              c=c+1; 
             } 
            if(array[i][j-1]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i+1][j-1]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i-1][j]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i+1][j]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i-1][j+1]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i][j+1]=='*') 
             { 
              c=c+1; 
             } 
            if (array[i+1][j+1]=='*') 
             { 
              c=c+1; 
             } 
            switch(c) 
             { 
             case 0: 
              { 
               array[i][j]=' '; 
               break; 
              } 
             case 1: 
              { 
               array[i][j]='1'; 
               break; 
              } 
             case 2: 
              { 
               array[i][j]='2'; 
               break; 
              } 
             case 3: 
              { 
               array[i][j]='3'; 
               break; 
              } 
             case 4: 
              { 
               array[i][j]='4'; 
               break; 
              } 
             case 5: 
              { 
               array[i][j]='5'; 
               break; 
              } 
             case 6: 
              { 
               array[i][j]='6'; 
               break; 
              } 
             case 7: 
              { 
               array[i][j]='7'; 
               break; 
              } 
             case 8: 
              { 
               array[i][j]='8'; 
               break; 
              } 
             } 
           } 
         } 
       } 

      for(i=0;i<tall;i++) 
       { 
        for(j=0;j<width;j++) 
         { 
          printf("%c",array[i][j]); 
         } 
        printf("\n"); 
       } 
     } 

    return 0; 
} 
+2

のコードを修正しました。 'i = 0'のときは' array [i-1] 'にアクセスすべきではありません。 'j = 0'のときは' array [...] [j-1] 'にアクセスすべきではありません。そして、あなたが他の極端な時には 'i + 1'と' j + 1'にも同様の問題があります。 – Barmar

答えて

0

3つの問題が:Barmarとして
1.あなたは、配列へのアクセスを制限する必要があると述べました。 iまたはjが極端な値(0またはtall-1width-1)であるかどうかをif-clauseでチェックインしてください。
2.あなたがさえたコードの一部を入力していなかったので、常にfalseと評価され、あなたの場合は

if(array[i][j]==0) 

の整数でのcharの値を比較しています。
3. 1つの場所で作業が完了したら、c0にリセットしません。

あなたは、配列の境界外へのアクセス、その部分

for(i=0;i<tall;i++){ 
    for(j=0;j<width;j++){ 
     c = 0; 
     if(array[i][j]=='0'){ 
      if(i != 0 && j != 0 && array[i-1][j-1]=='*'){ 
       c=c+1; 
      } 
      if(j != 0 && array[i][j-1]=='*'){ 
       c=c+1; 
      } 
      if (i != tall-1 && j != 0 && array[i+1][j-1]=='*'){ 
       c=c+1; 
      } 
      if (i != 0 && array[i-1][j]=='*'){ 
       c=c+1; 
      } 
      if (i != tall-1 && array[i+1][j]=='*'){ 
       c=c+1; 
      } 
      if (i != 0 && j != width-1 && array[i-1][j+1]=='*'){ 
       c=c+1; 
      } 
      if (j != width-1 && array[i][j+1]=='*'){ 
       c=c+1; 
      } 
      if (i != tall-1 && j != width-1 && array[i+1][j+1]=='*'){ 
       c=c+1; 
      } 
      switch(c){ 
       case 0:{ 
        array[i][j]='0'; 
        break; 
       } 
       case 1:{ 
        array[i][j]='1'; 
        break; 
       } 
       case 2:{ 
        array[i][j]='2'; 
        break; 
       } 
       case 3:{ 
        array[i][j]='3'; 
        break; 
       } 
       case 4:{ 
        array[i][j]='4'; 
        break; 
       } 
       case 5:{ 
        array[i][j]='5'; 
        break; 
       } 
       case 6:{ 
        array[i][j]='6'; 
        break; 
       } 
       case 7:{ 
        array[i][j]='7'; 
        break; 
       } 
       case 8:{ 
        array[i][j]='8'; 
        break; 
       } 
      } 
     } 
    } 
} 
関連する問題