我正在尝试下面的C代码:
#include <stdio.h>
int 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
应保留其起始值,对吗?
答案 0 :(得分:18)
摘录
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
的值。
答案 1 :(得分:16)
我知道在for循环结束时有一个分号会停止for循环迭代多次。
这不完全正确:for
循环后的分号变为循环的空体。循环迭代五次,在每次迭代中递增i
。大括号中的语句仅在循环结束时执行。
此时i
变为30
,因为这是您的循环后置条件(即必须的条件为了循环完成,这是真的。这是由printf
打印的内容。
答案 2 :(得分:10)
for(i = start; i < end; i++);
此循环将迭代5
次,直到i
等于end
,即30
。在1
次迭代后它不会停止。
由于;
以下printf
不是循环体的一部分,但;
并不意味着循环将迭代1
时间。迭代条件为true
,但循环体不包含;
以外的任何内容。
答案 3 :(得分:8)
由于冒号,您的程序现在相当于:
#include <stdio.h>
int main()
{
int i=10;
int start=25;
int end = 30;
for(i = start; i < end; i++)
{
//do nothing
}
printf("%d\n", i);
}
您的循环将i
移至30
,然后将其打印出来。
答案 4 :(得分:2)
大括号内的代码(for
下方)不是for循环的一部分。
换句话说,由于在for
语句的末尾包含分号,你的循环没有正文。