二维数组以及如何在C中打印数组
我正在尝试打印一个2D数组,它应该是这样的二维数组以及如何在C中打印数组,c,arrays,2d,C,Arrays,2d,我正在尝试打印一个2D数组,它应该是这样的 ************* * * ************* 像一个框架,但我有困难,因为它不是打印星星,而是打印数字,甚至我指定的42(“*”)列也没有显示。我不知道问题是否在于我打印阵列的方式。我希望有人能帮助我。非常感谢。 这是我的代码:inti,j int star=42; char starchar=(char)star; //colMax=10; int frame[ro
*************
*
*
*************
像一个框架,但我有困难,因为它不是打印星星,而是打印数字,甚至我指定的42(“*”)列也没有显示。我不知道问题是否在于我打印阵列的方式。我希望有人能帮助我。非常感谢。
这是我的代码:inti,j
int star=42;
char starchar=(char)star;
//colMax=10;
int frame[rowMax][colMax];
for(row=0;row<rowMax;row++)
{
for(column=0;column<colMax;column++)
{
frame[0][column]=starchar;
frame[9][column]=starchar;
frame[row][9]=starchar;
printf("%d%d",row,column);
}
intstar=42;
char starchar=(char)star;
//colMax=10;
int帧[rowMax][colMax];
对于(row=0;row它正在打印数字,因为您正在将%d%d传递给printf函数,该函数表示十进制数。将%d替换为%c以获得字符表示形式。请参阅printf手册,例如
另外,您还有另一个问题,即您正在将您想要的值以外的值传递到printf中。您正在传递的行和列不是该位置的值,而是索引的编号。您希望类似于:
printf(“%c”,框[行][列])
正如Paul Roub在评论中指出的,您在显示循环期间将值放入数组的方式也有一些奇怪的事情,如果您进一步开发此代码,这可能会让您感到困惑。首先,您永远不会指定数组的非星形部分中有什么。这些应该设置为类似spa的值在添加星号之前或同时添加ce字符。写入时,值将默认为零,这在ASCII中是不可打印的null,而不是空格(32)
此外,我假设您的意思是先设置值,然后显示它们。循环的工作方式是,在绘制值时设置值,这是一种有趣的方式,我假设这不是您想要的。您的示例当前将显示您期望的内容,但通常我希望您先填写值,然后以后再显示。printf(“%d%d”,行,列);
打印行和列,而不是框[行][列]
中的值
#include <string.h>
#include <stdio.h>
int main(void) {
// Not clear if rowMax is the maximum index or the width. Assume maximum index.
size_t rowMax = 10;
size_t colMax = 5;
int star = '*';
// Much easier to use char array
char frame[rowMax + 1][colMax + 1]; // +1 the dimensions
// fill
memset(&frame[0], star, colMax + 1); // fill first row
for (size_t row = 1; row < rowMax; row++) {
memset(&frame[row], ' ', colMax); // fill with spaces
frame[row][colMax] = star;
}
memset(&frame[rowMax], star, colMax + 1); // fill last row
// print
for (size_t row = 0; row <= rowMax; row++) {
for (size_t col = 0; col <= colMax; col++) {
fputc(frame[row][col], stdout);
}
fputc('\n', stdout);
}
return 0;
}
#包括
#包括
内部主(空){
//不清楚rowMax是最大索引还是宽度。假定为最大索引。
最大尺寸为10;
大小\u t colMax=5;
整数星='*';
//更容易使用字符数组
字符帧[rowMax+1][colMax+1];//+1维度
//填满
memset(&frame[0],星形,colMax+1);//填充第一行
对于(行大小=1;行<行最大值;行++){
memset(&frame[row],“”,colMax);//用空格填充
帧[行][colMax]=星型;
}
memset(&frame[rowMax],星形,colMax+1);//填充最后一行
//印刷品
对于(size_t row=0;row),您没有打印数组。您正在打印索引row
和column
,作为整数。这里希望frame
在循环之前的某个地方被空格字符填充。否则,甚至您的printf()
将显示非9行和列的未初始化垃圾。这也是,但至少这两个修复程序将实际显示数组中的内容。:-)首先感谢您的帮助,此printf(%c,frame[row][column]),打印了星星。空白处应填充0。我尝试使用曼哈顿距离来表示移动的点。每次它移动到某个位置时,该位置的0将替换为(a-c)+(b-d)生成的值;并且应该显示它。我想表示一条路径,其中的星星看起来很整洁,但我学到了很多。如果你想有一张地图,显示可以是多个数字的数字,它们之间有空格,这样你就可以读取数字,然后用星星表示边框,你需要更复杂一点的代码。如果值永远不会超过9,你可以通过将数字存储为值+ASCII中数字的偏移常量(即+48),ASCII可以对数字进行编码,使其正确显示。请参阅