如何打印出这个二维数组?

How do I print out this 2D array?

这里的新手程序员正在尝试打印出二维星号数组。我要实现的输出是:

*******
 *******
  *******
   *******

这是 7 个带前导 space 的星号,每行递增 1,第 1 行以 0 个前导 space 开头,第 4 行以 3 个前导 space 开头。

只能使用 <stdio.h> 库,我想继续使用嵌套的 for 循环。这是我的尝试:

#include <stdio.h>

int main(void)
{
  int i, j;
  char star[1] = {'*'};

  for(i = 0; i < 4; i++)
    {
      for(j = 0; j < 8; j++)
        {
          printf("%*c", i, star[0]);
        }
      printf("\n");
    }

  return 0;
}

这是我得到的:

********
********
 * * * * * * * *
  *  *  *  *  *  *  *  *

我也希望这个问题成为我从这个社区学习良好的通用编程实践和习惯的机会,所以如果你能批评我的实现,我将不胜感激。

首先,这与多维数组没有任何关系。其次,您在 printf 调用

中使用了宽度格式说明符
printf("%*c", i, star[0]);

并将该宽度设置为 i。因此每次调用

printf("%*c", i, star[0]);

您将打印输出的最小宽度指定为 i 个字符。由于您的输出是单个 * 字符,因此会导致空白填充。

因此,在基于 i 的循环 (i = 3) 的最后一次迭代中,您导致了字符串

'  *'

每次都要打印,倒数第二次迭代(i = 2)

' *' 

等等。

由于您并不真正需要长度为 1 的 char 数组,因此您可以使用

获得所需的输出
for(i = 0; i < 4; i++)
{
  if (i > 0)
  {
    printf("%*c",i,' ');
  }
  for(j = 0; j < 8; j++)
  {
    printf("%c", '*');
  }
  printf("\n");
}

您编写的程序在每个星号之前打印 space,并且 space 长度与 'i' 变量相关'。

你应该在打印 8 颗星的循环开始之前打印 (spaces * i)。

在Python,如果你感兴趣的话:

    for x in range(4):
        print ((x * " ") + ("*" * 7))

应用相同的想法,在迭代的基础上用空格填充开头,然后添加星号

我会这样写。 #include

int main() {
  for(int i = 0; i < 4; i++ ) {
      for( int p = 0; p < i; p++ ) {
          printf(" ");
      }
      for( int j = 0; j < 8; j++ ) {
          printf("*");
      }
      printf("\n");
  }
  return 0;
}