关于“扫雷游戏”的问题

#include
void initBoard(char arr[102][102], int N, int M)
{
    for (int i = 0; i < 102; i++)
    {
        for (int j = 0; j < 102; j++)
        {
            arr[i][j] = '^';
        }
    }
    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= M; j++)
        {
            scanf_s("%c", &arr[i][j]);
        }
        getchar();
    }
}
int judge(char mine[102][102], int x, int y)
{
    if (mine[x][y] = '*')
        return 1;
    else
        return 0;
}
int minecount(char mine[102][102], int x, int y)
{
    int sum = 0;
    if (judge(mine,x - 1, y))
        sum++;
    if (judge(mine, x + 1, y))
        sum++;
    if (judge(mine, x - 1, y - 1))
        sum++;
    if (judge(mine, x + 1, y + 1))
        sum++;
    if (judge(mine, x - 1, y + 1))
        sum++;
    if (judge(mine, x + 1, y - 1))
        sum++;
    if (judge(mine, x, y - 1))
        sum++;
    if (judge(mine, x, y + 1))
        sum++;
        return sum;
}
void findMine(char arr[102][102], int N, int M)
{
    for (int i = 1; i <= N; i++)
    {
        for (int j = 1; j <= M; j++)
        {
            if (arr[i][j] == '*')
            {
                printf("%c", arr[i][j]);
            }
            else
            {
                printf("%d", minecount(arr, i, j));
            }
        }
        printf("\n");
    }
}
int main()
{
    int count = 1;
    int N = 0;
    int M = 0;
    char arr[102][102] = { 0 };
    while (scanf("%d %d\n", &N, &M) != EOF)
    {
        //         getchar();
        if (M == N && N == 0)
        {
            return 0;
        }
        initBoard(arr, N, M);
        printf("Field #%d:\n", count);
        findMine(arr, N, M);
        printf("\n");
        count++;
    }
    return 0;
}

扫雷数都是8,怎么解决?应该是27行的函数有问题,如何修改?


scanf_s("%c", &arr[i][j]);
改成
scanf_s("%c", &arr[i][j],1);
====
if (mine[x][y] = '*')
改为
if (mine[x][y] == '*')

直接给你一个扫雷代码

#include<stdio.h>
#include<math.h>
#include<time.h>
#include<stdlib.h>
main( )
{char a[102][102],b[102][102],c[102][102],w;
int i,j;  
int x,y,z[999];  
int t,s;  
int m,n,lei; 
int u,v; 
int hang,lie,ge,mo;  
srand((int)time(NULL));  
leb1:  
printf("\t行号和列号都从0开始,比如要确定第0行第9列不是“雷”,就在0和9中间加入一个字母,可以输入【0a9】三个字符再按回车键。\n\t行7列不是雷,则输入【3a7】回车;第8行第5列是雷,就输入【8#5】回车,9行0列是雷则输入【9#0】并回车");
printf("\n   请选择模式:\n   1.标准  2.自定义\n");
scanf("%d",&mo);
if(mo==2)  
{do
{t=0; printf("请输入\n行数 列数 雷的个数\n");
scanf("%d%d%d",&hang,&lie,&ge);
if(hang<2){printf("行数太少\n"); t=1;}
if(hang>100){printf("行数太多\n");t=1;}
if(lie<2){printf("列数太少\n");t=1;}
if(lie>100){printf("列数太多\n");t=1;}
if(ge<1){printf("至少要有一个雷\n");t=1;}
if(ge>=(hang*lie)){printf("雷太多了\n");t=1;}
}while(t==1);
}
else{hang=10,lie=10,ge=10;}  
for(i=1;i<=ge;i=i+1)  
{do
{t=0; z[i]=rand( )%(hang*lie);
for(j=1;j<i;j=j+1){if(z[i]==z[j]) t=1;}
}while(t==1);
}
for(i=0;i<=hang+1;i=i+1)  
{for(j=0;j<=lie+1;j=j+1) {a[i][j]='1'; b[i][j]='1'; c[i][j]='0';} }
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1) {a[i][j]='+';} }
for(i=1;i<=ge;i=i+1)  
{x=z[i]/lie+1; y=z[i]%lie+1; c[x][y]='#';}
for(i=1;i<=hang;i=i+1)  
{for(j=1;j<=lie;j=j+1)
{m=48;
if(c[i-1][j-1]=='#')m=m+1; if(c[i][j-1]=='#')m=m+1;
if(c[i-1][j]=='#')m=m+1;  if(c[i+1][j+1]=='#')m=m+1;
if(c[i][j+1]=='#')m=m+1;  if(c[i+1][j]=='#')m=m+1;
if(c[i+1][j-1]=='#')m=m+1; if(c[i-1][j+1]=='#')m=m+1;
b[i][j]=m;
}
}
for(i=1;i<=ge;i=i+1) 
{x=z[i]/lie+1; y=z[i]%lie+1; b[x][y]='#';}

lei=ge;  
do
{leb2:  
system("cls");printf("\n\n\n\n");

  printf("    ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c  ",w);
}
printf("\n   |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf("   |");
else printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei);
printf("\n   |");
for(j=1;j<=lie;j=j+1){printf("---|");}
printf("\n");
}

scanf("%d%c%d",&u,&w,&v);  
u=u+1,v=v+1;
if(w!='#'&&a[u][v]=='@')
goto leb2;
if(w=='#')
{if(a[u][v]=='+'){a[u][v]='@'; lei=lei-1;}
else if(a[u][v]=='@'){a[u][v]='?'; lei=lei+1;}
else if(a[u][v]=='?'){a[u][v]='+';}
goto leb2;
}
a[u][v]=b[u][v];

leb3: 
t=0;
if(a[u][v]=='0')
{for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=1;i<=hang;i=i+1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;   if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=1;j<=lie;j=j+1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1; if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}
for(i=hang;i>=1;i=i-1)
{for(j=lie;j>=1;j=j-1)
{s=0;
if(a[i-1][j-1]=='0')s=1; if(a[i-1][j+1]=='0')s=1;
if(a[i-1][j]=='0')s=1;  if(a[i+1][j-1]=='0')s=1;
if(a[i+1][j+1]=='0')s=1;if(a[i+1][j]=='0')s=1;
if(a[i][j-1]=='0')s=1;  if(a[i][j+1]=='0')s=1;
if(s==1)a[i][j]=b[i][j];
}
}

for(i=1;i<=hang;i=i+1)  
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')
{if(a[i-1][j-1]=='+'||a[i-1][j-1]=='@'||a[i-1][j-1]=='?')t=1;
if(a[i-1][j+1]=='+'||a[i-1][j+1]=='@'||a[i-1][j+1]=='?')t=1;
if(a[i+1][j-1]=='+'||a[i+1][j-1]=='@'||a[i+1][j-1]=='?')t=1;
if(a[i+1][j+1]=='+'||a[i+1][j+1]=='@'||a[i+1][j+1]=='?')t=1;
if(a[i+1][j]=='+'||a[i+1][j]=='@'||a[i+1][j]=='?')t=1;
if(a[i][j+1]=='+'||a[i][j+1]=='@'||a[i][j+1]=='?')t=1;
if(a[i][j-1]=='+'||a[i][j-1]=='@'||a[i][j-1]=='?')t=1;
if(a[i-1][j]=='+'||a[i-1][j]=='@'||a[i-1][j]=='?')t=1;
}
}
}
if(t==1)goto leb3;
}

n=0;  
for(i=1;i<=hang;i=i+1)
{for(j=1;j<=lie;j=j+1)
{if(a[i][j]!='+'&&a[i][j]!='@'&&a[i][j]!='?')n=n+1;}
}
}
while(a[u][v]!='#'&&n!=(hang*lie-ge));

for(i=1;i<=ge;i=i+1) 
{x=z[i]/lie+1; y=z[i]%lie+1; a[x][y]='#'; }
printf("    ");
for(i=1;i<=lie;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c  ",w);
}
printf("\n   |");
for(i=1;i<=lie;i=i+1){printf("---|");}
printf("\n");
for(i=1;i<=hang;i=i+1)
{w=(i-1)/10+48; printf("%c",w);
w=(i-1)%10+48; printf("%c |",w);
for(j=1;j<=lie;j=j+1)
{if(a[i][j]=='0')printf(" |");
else  printf(" %c |",a[i][j]);
}
if(i==2)printf(" 剩余雷个数");
if(i==3)printf(" %d",lei); printf("\n   |");
for(j=1;j<=lie;j=j+1) {printf("---|");}
printf("\n");
}
if(n==(hang*lie-ge)) printf("你成功了!\n");
else printf("    游戏结束!\n");
printf("    重玩请输入1\n");
t=0; 
scanf("%d",&t);
if(t==1)goto leb1;
}