如何在C中创建数字网格
我想创建一个从1到30的数字网格。我可以用一个“X”替换掉哪个数字。但是我甚至不能用char[]打印出网格 123456 7 8 9 X 11 12 13141561718 19 20 21 22 23 24 25 26 27 28 X 30 这个节目给了我如何在C中创建数字网格,c,arrays,C,Arrays,我想创建一个从1到30的数字网格。我可以用一个“X”替换掉哪个数字。但是我甚至不能用char[]打印出网格 123456 7 8 9 X 11 12 13141561718 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&l
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") ;
}
inti,j,x;
char plan[6][5];
对于(i=0;isprintf(char*str,const char*format,…)。第一个参数应该是指针,但您正在传递一个字符,这将给您带来错误:从char
到char*
的转换无效。最好使用&plan[i][j]<>代码>但是它只存储一个数字,为了解决这个问题,你可以把网格中的每一个元素看作一个字符串。(我不认为这是一个合适的方法,但是它会产生期望的输出)。
#包括
int main(){
int i,j,x;
char plan[5][6][3];
对于(i=0;isprintf(char*str,const char*format,…)。第一个参数应该是指针,但您正在传递一个字符,这将给您带来错误:从char
到char*
的转换无效。最好使用&plan[i][j]<>代码>但是它只存储一个数字,为了解决这个问题,你可以把网格中的每一个元素看作一个字符串。(我不认为这是一个合适的方法,但是它会产生期望的输出)。
#包括
int main(){
int i,j,x;
char plan[5][6][3];
对于(i=0;i对于手头的问题,您需要获取指向您试图放置值的位置的指针。使用&
获取地址:
sprintf(&plan[i][j],“%d”,x);
但是,一旦这样做,您将发现一个新问题。2D字符数组在每个位置只存储一个字符。如果是两位数,这将是一个问题。对于手头的问题,您需要获取一个指针,指向您尝试输入值的位置。使用&
获取地址:
sprintf(&plan[i][j],“%d”,x);
但是,一旦执行此操作,您将发现一个新问题。2D字符数组在每个位置仅存储一个字符。如果是两位数,这将是一个问题。确定这花费了一段时间:
在您的问题中,代码的第一个大错误是:
它应该是计划[5][6]
而不是计划[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") ;
}
}
#包括
#包括
使用名称空间std;
内部主(空)
{
int i,j,x;
串图[5][6];
x=1;//注意,在每个j循环结束后,我都会增加这个值
对于(i=0;iOk),这需要一段时间:
在您的问题中,代码的第一个大错误是:
它应该是计划[5][6]
而不是计划[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") ;
}
}
#包括
#包括
使用名称空间std;
内部主(空)
{
int i,j,x;
串图[5][6];
x=1;//注意,在每个j循环结束后,我都会增加这个值
对于(i=0;sprintf()
的第一个参数应该是一个char*
指针。不是一个字符。为什么在那里使用sprintf?难道你不想plan[i][j]=x
?(或者x&255
)仅供参考,你的循环与你的维度不匹配。内部循环在一个只有[5]的序列上索引0..6
将调用未定义的行为,尽管我有理由怀疑这不是真正的代码。是的,我希望计划[I][j]保存x的值。但是“计划[I][j]=x”不起作用。因为计划是char[]]?idk。如果计划是int[][],没关系。我没有试过x%255。@BLUEPIXY OMG非常感谢!!!!问题解决了。我是c n的初学者,我会在2天后交我的项目。谢谢大家!!!!!sprintf()
的第一个参数应该是一个achar*
指针。不是一个字符。你为什么在那里使用sprintf?你不只是想plan[I][j]=x
?(或x&255
)仅供参考,您的循环与您的维度不匹配。仅[5]
序列上的内部循环索引0..6将调用未定义的行为,尽管我有理由怀疑这不是真正的代码。是的,我希望计划[I][j]保存x的值。但“计划[I][j]=x”不起作用。因为计划是char[]?idk.如果计划为int[][],没关系。我没有试过x%255。@BLUEPIXY OMG非常感谢!!!!问题解决了。我是c n的初学者,我会在2天后交上我的项目。谢谢大家!!!!!没错。我该怎么处理它。我现在疯了。一个选项是有一个char*
的2D数组,这样2D数组中的每个位置都会产生一个可能很大的字符串如果要保留您希望输入的数字(加上终止字符)。另一个选项是重新考虑您的进程,将它们存储为int
,并使用超出预期值范围的值(例如负数)准确地表示一个“X”Y。我该如何处理它。我现在疯了。一个选项是使用一个2D数组,数组中的每个位置都有一个字符串,这个字符串可以足够大,可以容纳你想输入的数字(加上终止字符)。另一种选择是重新考虑您的流程,将其存储为int
,并使用超出预期值范围的值(例如负数)表示“X”。非常感谢。我决定使用3D数组存储2位数。非常感谢。我决定使用3D数组存储2位数。