cs50x马里奥金字塔不画画

时间:2016-12-10 22:43:35

标签: c cs50

我已经启动了CS50x问题集1;但是在输入高度数后,我的程序似乎停止了。

即。程序将要求一个8到23之间的数字(重复,直到它得到正确的输入),一旦我这样做,代码就会停止。

我在这里做错了什么?

以下是我编写的代码。所有的帮助将不胜感激,因为我在这里看了各种问题S.E.但没有人解决这个问题。

include stdio.h
include cs50.h

int main (void)

{

printf("ok lets make a pyramid :)\n");

    // height = x

    int x;

    // spaces = z

    int z;

    // hashes = a

    int a;

    // Get correct number for height

    do
    {
        printf("Give me a positive number between 8 and 23 for the height of the pyramid\n");
        x = GetInt();
    }

    while (x < 8 || x > 23);

    // Build the phantom pyramid 

    for (int q = 0; q == x; q++)
    {

    // Spaces

        for (z = x - 1; z == 0 ; z--)
        {
            printf(" ");
        }

            // Hashtags

            for (a = 1; a == q; a++)
            {
                printf("#\n");
            }
    }}

1 个答案:

答案 0 :(得分:0)

除了您的#include语法错误(#include <stdio.h>)之外,您的基本问题以及程序退出而不打印任何内容的原因是主for循环是从未进入过。在控制表达式为真时执行C for循环,直到为真。你有:

for (int q = 0; q == x; q++){ ... }

由于q == x评估为0(false),因为q0x介于8和23之间,因此此循环永远不会执行,并且程序退出。你的每个循环都有这个问题。你可以解决它:

for (int q = 0; q < x; q++)
    {
    // Spaces

        for (z = x - 1; z > 0 ; z--)
        {
            printf(" ");
        }

            // Hashtags

            for (a = 0; a <= q; a++)
            {
                printf("#");
            }
            printf("\n");
    }

请注意,在第一次循环中,q为0,因此a必须从0开始才能在第一行打印单个散列。此外,在循环完成打印行之前,不会打印换行符。这些更改为高度为8:

提供此输出
       #
       ##
       ###
       ####
       #####
       ######
       #######
       ########

我不确定这是否是您想要的输出。左边的间距与金字塔的高度有关。如果您想要左侧的金字塔步骤,您可以更改关联的for语句:

for (z = x - 1; z > q ; z--)

但我的印象是马里奥金字塔在左边有两个台阶,在顶线有两个哈希。您可以修改循环来执行此操作,但这是一个不同的循环。您不需要变量a,而不是将z视为&#34;空格&#34;,将其视为代表行位置:

for (int q = x; q > 0; q--) {

    // print spaces at beginning of line
    for (z = 1; z < q; z++) {
        printf(" ");
    }

    // print hashes at end of line
    for ( ; z < x + 2; z++) {
        printf("#");
    }
    // print newline when finished printing line
    printf("\n");
}

新循环为此输出提供高度为8:

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