如何打印出这个2D阵列?

时间:2015-10-26 01:05:28

标签: c loops printf

新手程序员在这里试图打印出一个2D星号阵列。我想要实现的输出是:

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

这是7个星号,前导空格每行增加1,第1行以0前导空格开头,第4行以3前导空格开头。

只能使用<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;
}

这是我得到的:

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

我也希望这个问题能让我有机会从这个社区学习良好的一般编程习惯和习惯,所以如果你能批评我的实现,我会非常感激。

4 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:0)

你编写的节目在每个星星之前打印空间,并且该空间长度与“i”相关联。变量&#39;

你应该在打印8星线甚至开始的循环之前打印(空格* i)。

答案 2 :(得分:0)

这是我怎么写的。     #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;
}

答案 3 :(得分:-2)

如果您对此感兴趣,请使用Python:

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

应用同样的想法,根据迭代用空格填充开头,然后添加星号