【问题标题】:How do I print out this 2D array?如何打印出这个二维数组?
【发布时间】:2016-01-25 00:49:30
【问题描述】:

这里的新手程序员试图打印出一个 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;
}

这是我得到的:

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

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

【问题讨论】:

  • 不需要multidimensional-array标签,根本不需要数组。
  • 好的,我刚刚删除了它。

标签: c loops printf


【解决方案1】:

首先,这与多维数组没有任何关系。其次,您在 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");
}

【讨论】:

  • 嗯...是的,我明白了。如果我删除宽度指示器,我现在会得到 7 个星号块,没有前导空格。如何修复它,以便在打印星号之前前导空格随每一行增长?
【解决方案2】:

您编写的程序会在每个星号之前打印空格,而空格长度与“i”变量有关。

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

【讨论】:

    【解决方案3】:

    这里是 Python,如果您有兴趣:

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

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

    【讨论】:

    • 这无关紧要
    • 你能解释一下吗?我提供了一个关于如何用另一种编程语言做到这一点的抽象想法
    • 因为 OP 专门要求 C 中的解决方案
    【解决方案4】:

    我会这样写。 #包括

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

    【讨论】:

      猜你喜欢
      • 2021-12-11
      • 2015-02-03
      • 2011-03-02
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-11-17
      • 2015-02-05
      相关资源
      最近更新 更多