2D数组以及如何在C中打印数组

时间:2014-10-14 19:38:35

标签: c arrays 2d

我正在尝试打印一个看起来像这样的二维数组

*************
            *
            *
*************
像一个框架,但我很难,因为它不打印星星而不是打印数字,甚至我用42('*')指定的那些列也没有显示。我不知道问题是否是我打印阵列的方式。我希望有一个人可以帮助我。谢谢! 这是我的代码:int i,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);
                }

2 个答案:

答案 0 :(得分:1)

打印数字是因为您将%d%d传递给printf函数,后者代表十进制数。用%c替换%d以获取字符表示。请参阅printf手册,例如在http://www.cplusplus.com/reference/cstdio/printf/

此外,您还有另一个问题,即除了打算使用printf之外的其他值。您正在传递行和列,它们不是该位置的值,而是索引的数字。你想要这样的东西:

的printf(&#34;%C&#34;,帧[行] [列]);

正如Paul Roub在评论中指出的那样,你在显示循环期间将值放入数组的方式也做了一些奇怪的事情,如果你进一步开发这个代码,这可能会让你感到困惑。首先,您没有指定数组中非星形部分的内容。那些应该被设置为类似空格字符之前或同时添加星星。如上所述,值将默认为零,这在ASCII中是不可打印的null,而不是空格(即32)。

另外,我假设你的意思是首先设置值,然后显示它们。循环的工作方式,它是在绘制它们时设置值,以一种有趣的方式,我认为这不是你想要的。您的示例目前最终会显示您的期望,但通常我希望您先填写值,然后再显示它们。

答案 1 :(得分:0)

printf("%d%d",row,column);打印rowcolumn,而不是frame[row][column]中的值。

#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;
}