为什么我的 C 程序得不到预期的输出?

Why am I not getting the desired output of my C program?

//Aim of this program is to print a hash pyramid

#include <stdio.h>
#include <cs50.h>

int main(void)
{
    int height, spaces, hash;
    do
    {
        printf("Enter the height of the wall:\n");  // Prompt the user for the height
        height = get_int();
    }
    while(height<0 || height>23);

    for (int i=0; i<height; i++)
    {
        for (spaces= height-i; spaces>1; spaces--)
        {
            printf(" ");                //print spaces
            for (hash= 0; hash<=height+1; hash++)
            {
                printf("#");                //print hashes
            }
            printf("\n");                    //move to the next line
        }
    }
}

这是一个打印哈希金字塔的程序。 我这样做是我在 edx 上的 CS50x 课程的一部分,所以我包括了 CS50 library.Now,关于这个程序,我知道我在第三个 'for loop' 中搞砸了一些东西,但我不知道是什么。

有人可以帮我解决这个问题吗?

循环 1 次。
你不需要3个循环!

#include <stdio.h>

int main(void) {
    int height;

    do
    {
        printf("Enter the height of the wall:\n");  // Prompt the user for the height
        scanf("%d", &height);
    }
    while(height<0 || height>23);

    for(int i = 0; i < height; ++i)
    {
        printf("%d: %*.*s\n", i+1, height+i, 2*i+1, "########################################");
    }

    return 0;
}

高度为 6 的示例输出:

Success #stdin #stdout 0s 4284KB
1:      #
2:     ###
3:    #####
4:   #######
5:  #########
6: ###########

我在你的代码中发现了三个问题

1) 打印 # 的循环应 而不是 在循环打印空格

2) 打印#的循环有不正确的停止条件

3) 看来你搞砸了 hheight。我只是假设它们应该完全相同

试一试:

#include <stdio.h>

int main()
{
    int h, spaces, hash;

    h = 5;  // Fixed input to simplify code example

    for (int i=0; i<h; i++)
    {
        for (spaces= h-i; spaces>1; spaces--)
        {
            printf(" ");
        }
        for (hash= 0; hash<=2*i; hash++)  // Notice: <= 2*i
        {
          printf("#");
        }
        printf("\n");
    }

  return 0;
}

输出:

    #
   ###
  #####
 #######
#########

以下代码应该适合您

#include <stdio.h>
#include <cs50.h>

int main(void)
    {
        int i, height, spaces, hash;
        do
        {
        printf("Enter the height of the wall:\n");   
                                    // Prompt the user for the height
        scanf("%d", &height);// = get_int();
        }
        while(height<0 || height >= 23);

  for ( i=0; i<height; i++)
  {
    for (spaces= height - i; spaces>1; spaces--)
    {
        printf(" ");                //print spaces
    }
    for (hash= 0; hash<=i; hash++)
    {
        printf("# ");                //print hashes
    }
    printf("\n");                    //move to the next line

   // }
  }

}

问题很简单,您在名为“height”的变量中获取变量输入,在 for 循环中您使用了一个未初始化的变量 h。 第三个 for 循环 将在第二个 for 循环

之外

这将是你的循环:

for (int i=0; i<h; i++)
{
    for (spaces= h-i; spaces>1; spaces--)
    {
        printf(" ");  
    }

    for (hash= 0; hash<=h+1; hash++)
    {
        printf("#");                //print hashes
    }
    printf("\n");                    //move to the next line
    }
}