我想创建一个从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") ;
}
答案 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")