不打印正确的字符数组C.

时间:2016-10-14 18:46:15

标签: c for-loop printf

我正在尝试打印扫雷板。

目前,它只会打印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 个答案:

答案 0 :(得分:0)

三个问题:
1.正如Barmar所说,你需要限制对阵列的访问。只需检查if-clauses,ij是否为极值(0或tall-1width-1)。
2.您正在将char的值与

中的整数进行比较
if(array[i][j]==0)

在您的情况下总是评估为false,因此您甚至没有输入代码的那一部分 3.完成一个位置后,您不会将计数器c重置为0

更正该部分的代码

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;
                }
            }
        }
    }
}