我怎样才能将我的输出对齐到中心?

How could I align my output to the center?

    #include<stdio.h>
    int main()
    {
        int n ;
        printf("Input the number of rows: ");
        scanf("%d", &n);

        for(int i = 1; i <= n ; i++)
        {
            for(int j = 1 ; j <= i ; j++)
            {
                if(j == i + 1)
                {
                    break;
                }

                printf("%3d", j);
    
            }
            for(int  j = i - 1 ; j > 0; j--)
            {
                if(j == 0)
                {
                    break;
                }
                printf("%3d", j);
            }
            printf("\n");
            
        }
    }

节目环节

Number of rows for this output n = 3

My output:   
            1
            1  2  1      
            1  2  3  2  1


Preferred output:   
                  1
               1  2  1      
            1  2  3  2  1
           

这是一个练习,我必须打印一个数字金字塔,其中金字塔的中心数字是行数。我理解其中的逻辑,但如您所见,我未能成功完成任务。有什么建议吗?

正如@WeatherWane 所指出的,您需要添加逻辑来添加额外的空格。如果你仔细观察,每行的空格数(不包括你用 %3d 添加的填充等于 3 * (n - i))。你可以创建一个像这样的简单方法来添加间距:

void addSpaces(int N, int currentIndex, int padding) {
  for (int index = currentIndex; index < N; index++)
      for (int spaces = 0; spaces < padding; spaces++)
         printf(" ");
}

然后您可以从第一个 for 循环中调用它,如下所示:

  for(int i = 1; i <= n ; i++)
    {
      addSpaces(n, i, 3);
      for(int j = 1 ; j <= i ; j++)
        {
           // ...

我测试了一下,似乎对齐正确:

c-posts : $ ./a.out 
Input the number of rows: 5
              1
           1  2  1
        1  2  3  2  1
     1  2  3  4  3  2  1
  1  2  3  4  5  4  3  2  1