我只是想知道为什么:
int i;
for (i=0; i<5; i++){
printf("%d\n",i)
}
printf("Here i get the result that misleads me : %d\n",i)
最后一个值是5.
我的逻辑是:
From 0 to 4 -> printf
If i > 4 (since we are dealing with integers) stop the loop.
但循环停在4而不是5!循环后为什么我得到5?它为什么会增加?
任意吗?
谢谢,
答案 0 :(得分:2)
展开正在发生的事情
int i = 0;
while( i < 5 )
{
// body of for loop
i++;
}
// i == 5 here as i must be greater than or equal to 5 to break out of while loop
答案 1 :(得分:2)
for语句中有三个条款。
因此,每个for循环执行结束,执行递增操作,并且在第4次迭代中,i的值为5,for循环中断,因为第5次迭代中的值为5。
答案 2 :(得分:2)
for循环如何工作:
for (initialization; condition; increment-decrement)
Statement
i=0
)i<5
),如果为真,则跳转到3否则跳转到5 { printf("%d\n",i) }
)i++
),跳转到2 在最后一次迭代i == 4
之前,它会打印4
,递增i
。因此,在最后一次迭代i == 5
,!(5 < 5)
之后,即条件为假,退出循环。
答案 3 :(得分:1)
在每次迭代结束时,循环索引递增。然后程序检查是否运行另一个循环。它发现“没有索引太大并且条件失败”,因此它不会执行并退出。
在索引变得太大之前,条件不会失败。它必须变得太大(所以循环不会执行)。
这就是为什么......
答案 4 :(得分:1)
因为在第4次循环之后:
i++
,i
变为5 i<5
评估为false
然后在循环结束后得到i==5
。
确实,在每次循环之后,在检查退出条件i++
之前评估i<5
。
答案 5 :(得分:1)
for (int i = 0; i < 5; ++i)
是这样的:
i <- 0
i < 5
,如果是,则循环,否则停止i <- i + 1
答案 6 :(得分:0)
让我们看看这个循环:
for (i = 0; 0; i++)
do_smth();
你会看到这个循环根本不执行。因为条件从一开始就是假的。
现在
for (i = 0; i < 4; i++)
i++;
每次运行显然会增加i
两次(一次在循环内,然后,因为for
的第三部分)。最后,i
将具有使条件为假的第一个偶数值。那是6
。因此,步骤和循环外变量的值之间没有联系。