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