【问题标题】:not printing correct character array C不打印正确的字符数组 C
【发布时间】:2016-10-14 18:46:15
【问题描述】:

我正在尝试打印扫雷板。

目前,它只会打印 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+1j+1 也存在类似的问题。

标签: c for-loop printf


【解决方案1】:

三个问题:
1. 正如 Barmar 所说,您需要限制对数组的访问。只需检查 if 子句 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;
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 2020-07-04
    相关资源
    最近更新 更多