为什么我的C程序没有得到期望的输出?

时间:2018-06-21 06:03:25

标签: c for-loop cs50

//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库。现在,关于程序,我知道我在第三个“ for循环”中弄乱了东西,但我没有知道是什么。

有人可以帮我吗?

4 个答案:

答案 0 :(得分:2)

用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 :(得分:1)

我在您的代码中看到了三个问题

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

输出:

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

答案 2 :(得分:1)

以下代码应为您工作

#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

   // }
  }

}

答案 3 :(得分:0)

问题很简单,您在名为“ 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
    }
}