CS中的CS50 Mario金字塔 - 哈希不会按照代码逻辑的预期打印出来

时间:2017-04-16 14:24:57

标签: cs50

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

int main(void)
{
    int height, row, spaces, hashes; //declare all variables to be used    
    do //prompt the user for valid height inputs that are non-negative and less than 23.
    {
        printf("Height:");
        height = get_int();
    } while ((height < 0) || (height > 23));

    for (row = 1; row <= height; row ++) // iterate through each row of the height
    {
       for (spaces = (height - row); spaces >= 0; spaces--) //print the number of spaces for the ith row
       {
           printf(" ");
       }
       for (hashes = (row + 1); hashes <= (height + 1); hashes++) //print the number of hashes for each row
       {
           printf("#");
       }
       printf("\n");
    }
}

不确定我在上面的代码中缺少什么。空格按预期打印,但散列的行为被反转,打印最高和降低。

1 个答案:

答案 0 :(得分:1)

我们假设用户提交了12作为身高 您使用row = 1启动外部循环,从height - row = 110提供空格,生成12个空格。
哈希值从row + 1 = 2变为height + 1 = 13,产生12个哈希值 循环的下一次迭代:11个空格,11个哈希。

如果更改第二个内循环,可以实现预期目标:

for (hashes = 0; hashes < row; hashes++) //print the number of hashes for each row

如果这不是您所需要的,请将循环的开头更改为hashes = 1;或将结尾更改为row - 1;或您需要的任何内容。

你的错误是假设hashes++使其升序。从技术上讲,它只是改变了循环的顺序,而不是它运行的频率。由于您不需要hashes的实际值,因此订单无关紧要。唯一重要的是循环运行的频率;)