如何在C中创建数字网格

时间:2017-08-30 18:34:35

标签: c arrays

我想创建一个从1到30的数字网格。我可以通过用' X替换它来决定我想要删除哪个数字。但我甚至无法在char [] []中打印出网格。

  

1 2 3 4 5 6

     

7 8 9 X 11 12

     

13 14 15 16 17 18

     

19 20 21 22 23 24

     

25 26 27 28 X 30

程序给了我

123456
678911
111111
111122
222222

我该如何解决这个问题?谢谢!

int i, j, x;
char plan[6][5];

for (i=0; i<5; i++)
    for (j=0; j<6; j++)
        {
            x = i*5+j+1;
            sprintf(&plan[i][j], "%d", x);
        }



for (i=0; i<5; i++)
{
    for (j=0; j<6; j++)
        printf("%c", plan[i][j]);
    printf("\n")    ;
}

3 个答案:

答案 0 :(得分:0)

sprintf(char * str,const char * format,...)..第一个参数应该是一个指针,但是你传递的是一个字符,这会给你一个错误:从char转换为无效char*。更好的是你应该使用&plan[i][j] ..但是它只存储一个数字,为​​了解决这个问题,你可以将网格的每个元素都视为一个字符串。(我认为这不是一个合适的方法,但它将产生所需的输出。)

#include <stdio.h>

    int main(){
    int i, j, x;
    char plan[5][6][3];

    for (i=0; i<5; i++)
        for (j=0; j<6; j++)
            {
                x = i*6+j+1;
                sprintf(plan[i][j], "%d", x);
            }



    for (i=0; i<5; i++)
    {
        for (j=0; j<6; j++)
            printf("%s ", plan[i][j]);
        printf("\n")    ;
    }
    }

答案 1 :(得分:0)

对于手头的问题,您需要获取指向您尝试放置值的位置的指针。使用&获取地址:

sprintf(&plan[i][j], "%d", x);

但是一旦你这样做,你会发现一个新问题。您的2D数组字符只会在每个位置存储一个字符。如果是两位数字,这将是一个问题。

答案 2 :(得分:0)

好的,这需要一段时间:

在您的问题中,代码的第一个大错误是: 它应该是plan[5][6]而不是plan[6][5]

不使用3d数组并使用更多内存,一个简单的替代方法是使用数据类型string,如下所示:

#include<iostream>
#include <stdio.h>

using namespace std;

int main(void)
{
int i, j, x;
string plan[5][6];

x=1;//note that i increment this after every j loop is over
for (i=0; i<5; i++){
    for (j=0; j<6; j++) {
            char out[5];
            sprintf(out,"%d",x);

            plan[i][j].assign(out);
            x+=1;//note that i increment this after every j loop is over
        }
}

for (i=0; i<5; i++) {
    for (j=0; j<6; j++)
        printf(" %s ", plan[i][j].c_str());   
    printf("\n")    ;
}

}

如果按照问题中的说明放置x,您可以这样做。 plan[i][j].assign("x")