没有打印正确的字符数组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;
}
图拉玛特

三个问题:
1.正如Barmar所说,您需要限制对阵列的访问。只是检查在if子句是否i还是j有一些极端值(0或tall-1RESP。 width-1)。
2.您正在将char的值与in中的整数进行比较

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

在您的情况下,总是评估为false,因此您甚至都没有输入代码的那部分。
3.完成一个位置后,请勿将计数器重置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;
                }
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章