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

时间:2019-07-29 21:47:14

标签: c cs50

我不明白我该如何满足条件(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");
    }
}

1 个答案:

答案 0 :(得分:0)

我不确定您是否熟悉c中的for循环。

for语句包含三个部分+ code

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

这些部分是

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

A仅在开始时执行一次,然后按该顺序执行B, code 和C,直到B为假(或者for的执行从<中的语句终止em> 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时,内部循环将永远不会执行,与上面相同

希望有帮助