我正在尝试下面的C代码:
#includeint main() { int i=10; int start=25; int end = 30; for(i = start; i < end; i++); { printf("%d\n", i); } }
我知道在for循环结束时有一个分号会停止for循环迭代多次.但我输出'30'而不是'25'.为什么我得到这个结果?变量i
应保留其起始值,对吧?
for(i = start; i < end; i++);
该代码意味着i
是25
.循环继续i<30
.然后在循环之后i
,就像你写的那样30
.
在循环结束处加一个分号不会停止循环:它会被执行.在您的情况下,{}
只在主函数内打开一个不同的范围.
片段
for(i = start; i < end; i++); { printf("%d\n", i); }
相当于
for(i = start; i < end; i++); printf("%d\n", i);
进一步扩大
for(i = start; i < end;) { i++; // This statement will execute till i < 30 } printf("%d\n", i);
条件i < end
将通过循环体内执行语句来计算false
何时i
递增.
现在,该语句将被执行,将打印的值是.30
i++
printf("%d\n", i);
i
30
我知道在for循环结束时有一个分号会停止for循环迭代多次.
这不完全正确:for
循环后的分号变成了循环的空体.循环迭代五次,i
每次迭代递增.大括号中的语句仅在循环结束时才会执行.
在那一点i
变成30
,因为那是你的循环的后置条件(即为了循环完成必须为真的条件).这是由印刷品印制的printf
.
for(i = start; i < end; i++);
该循环将迭代5
一次,直到i
等于end
ie 30
.它在1
st迭代后不会停止.
由于;
以下printf
不是循环体的一部分,但;
并不意味着循环会迭代1
一段时间.它会迭代直到条件,true
但是循环的主体不包含任何其他东西;
.
由于冒号,您的程序现在相当于:
#includeint main() { int i=10; int start=25; int end = 30; for(i = start; i < end; i++) { //do nothing } printf("%d\n", i); }
你的循环移动i
到30
然后打印它.