为什么我的for循环在C中正常工作?

时间:2017-07-06 18:34:47

标签: c cs50

所以我有我为CS50 pset1 Mario问题创建的代码。代码行为正确并且正在完成它应该做的事情,但我不理解其中一个部分。为什么它会这样。

这是我用C编写的代码:

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

int main (void){
int height, row, space, hash;

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

    for (row=0; row<height; row++){

        for (space=height-(row+1); space>0; space--){
            printf("-");
        }

        for (hash=height-row; hash<=height; hash++){
            printf("#");
        }

        printf("#\n");
    }

}

因此,例如当用户输入3作为高度时,我得到

--##
-###
####

我不明白为什么不是:

--####
-###
##

这部分让我失望:

for (hash=height-row; hash<=height; hash++){
            printf("#");
        }

如果hash = height-row那么它不应该是3-0 = 3并让它打印哈希标志3次?然后3-1 = 2并打印两次,依此类推?为什么反过来呢?

有人可以解释我的逻辑有什么问题吗?

2 个答案:

答案 0 :(得分:4)

答案在for循环的条件和增量部分。

你是正确的,hash的初始值是3. for循环的条件部分将检查以确保hash(3)小于或等于height(3)。那么,3 <= 3?是。

for循环的增量部分确定每次迭代中的更改。在你的情况下,hash将增加1,所以下次执行循环时,hash的值为4.条件将检查:是hash(4)&lt; = height(3)?返回false,for循环终止。

当“行”循环的下一次迭代发生时,哈希的初始值为2(因为3 - 1 = 2)。这将继续向哈希添加1,直到“hash&lt; = height”返回false。随着“行”的增加,更多的“#”被打印出来。

答案 1 :(得分:2)

让我们分解for循环:

     for (hash=height-row; hash<=height; hash++){
        printf("#");
        }

当身高为3时:

for row = 0 (less than 3):
    for (hash = 3 - 0; hash <= 3 (true); hash++ (hash will be 4 next iteration))
        print #

接下来,

    for (has = 4; hash <= 3 (false); hash ++)
        (does not print #) 

最后,

    print #\n

你总共获得两个哈希,例如

--##