二维数组以及如何在C中打印数组

二维数组以及如何在C中打印数组,c,arrays,2d,C,Arrays,2d,我正在尝试打印一个2D数组,它应该是这样的 ************* * * ************* 像一个框架,但我有困难,因为它不是打印星星,而是打印数字,甚至我指定的42(“*”)列也没有显示。我不知道问题是否在于我打印阵列的方式。我希望有人能帮助我。非常感谢。 这是我的代码:inti,j int star=42; char starchar=(char)star; //colMax=10; int frame[ro

我正在尝试打印一个2D数组,它应该是这样的

*************
            *
            *
*************
像一个框架,但我有困难,因为它不是打印星星,而是打印数字,甚至我指定的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可以对数字进行编码,使其正确显示。请参阅