#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");
}
}
不确定我在上面的代码中缺少什么。空格按预期打印,但散列的行为被反转,打印最高和降低。
答案 0 :(得分:1)
我们假设用户提交了12
作为身高
您使用row = 1
启动外部循环,从height - row = 11
到0
提供空格,生成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
的实际值,因此订单无关紧要。唯一重要的是循环运行的频率;)