Cs50马里奥:我如何改进这段代码?

Cs50马里奥:我如何改进这段代码?,c,cs50,C,Cs50,我花了一整天的时间才弄明白这一点,但即使我完成了它,我也不完全理解它是如何工作的,我觉得有一种更好或更干净的写作方式 有人能解释一下我如何改进代码吗 #include<cs50.h> #include<stdio.h> int main(void) { int rows, height, spaces, hashes; do { printf("Height: "); height = get_int();

我花了一整天的时间才弄明白这一点,但即使我完成了它,我也不完全理解它是如何工作的,我觉得有一种更好或更干净的写作方式

有人能解释一下我如何改进代码吗

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

int main(void)
{
    int rows, height, spaces, hashes;

    do
    {
        printf("Height: ");
        height = get_int();
    }
    while(height < 0 || height > 23);

    for(rows = 0 ; rows < height; rows++)
    {
        for(spaces = height - 1; spaces > rows; spaces--)
        {
            printf(" ");
        }

        for(hashes = 0; hashes < spaces + 2; hashes++)
        {
            printf("#");
        }

        printf("\n");
    }

    return 0;
}
#包括
#包括
内部主(空)
{
整数行、高度、空格、哈希;
做
{
printf(“高度:”);
高度=get_int();
}
而(高度<0 | |高度>23);
对于(行=0;行<高度;行++)
{
对于(空间=高度-1;空间>行;空间--)
{
printf(“”);
}
for(哈希值=0;哈希值<空格+2;哈希值++)
{
printf(“#”);
}
printf(“\n”);
}
返回0;
}

最好先了解代码的作用。从输入
1
开始,在纸上完成

如果您感兴趣,您可能希望探索
printf
,其中格式说明符中的每个
*
都被相应的函数参数替换。但是请注意-
printf
是一个复杂而详细的函数。这也引入了数组

char hatch[] = "##############################";
for(rows = 0; rows < height; rows++) {
    printf("%*.*s\n", height + 1, rows + 2, hatch);
}
对于
5的输入,它将打印

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

这也一样。循环包含一条指令。

您可以使用
putchar('#')
等来输出单个字符,而不是使用
printf(“#”)等。您可以更改
空格
散列
来循环作用域变量,并使用:
for(int spaces=height-1;spaces>rows;spaces--){}
for(int hashes=0;hashes
。我不知道putchar(),我昨天晚上几乎没有说学习C,并使用了我从讲座中学到的东西。代码还不错……你已经得到了一些建议的小改进。我更关心的是“我不完全理解它是如何工作的”第二部分是关于你的代码。
    ##
   ###
  ####
 #####
######