无法在第二个“'FOR'”上获取“'i'”的值

Can't get the value of ''i'' on the second ''FOR''

我不明白我是怎么得到第二个 for 的条件 (altura - i + 1)

例如,当 altura = 2 时我没有得到我假设的值,然后它运行:for(espaço=3; espaço<=(altura-i+1);espaço++)

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

int main(void)
{
    int altura;
    int espaço;
    int asterisco;

    do { 
        altura = get_int("Height:");
    } while(altura<1||altura>8);

    for( int i = 0; i<altura;i++)
    {
        for(espaço=3; espaço<=(altura-i+1);espaço++)
        {
            printf(" ");
        }
        for (asterisco=0;asterisco<=i;asterisco++)
        {
             printf("#");  
        }
        printf("\n");
    }
}

我不确定您是否熟悉 c.

中的 for 循环

for语句分为三部分 + code:

for(A;B;C)
{
    *code*;
}

那些部分是

  • A:初始化语句
  • B: 测试条件
  • C:更新语句

A最开始只执行一次,然后B、code、C依次执行,直到B为false(或者for终止执行来自 code).

中的语句

这意味着在您的情况下,例如 altura=5

int espaço;
int altura = 5;
for(int i=0; i<altura; i++)
{
        for(espaço=3; espaço<=(altura-i+1); espaço++)
        {
            *code*;
        }

}

外层循环执行i=0,1,2,3,4 在内部循环中,

  • 当 i=0, altura-0+1=6, 那么 espaço=3,4,5
  • 当 i=1, altura-1+1=5, 那么 espaço=3,4
  • 当 i=2, altura-2+1=4, 那么 espaço=3
  • 当i=3, altura-3+1=3, 那么内循环永远不会执行因为espaço=3 但测试条件是espaço < 3
  • 当i=4,altura-4+1=2时,内层循环不执行,同上

希望对您有所帮助