在C和C#中这个片段:
int ii;
for(ii=1;ii<5;ii++);
printf("ii = %d",ii);
打印出ii = 5
而这个片段(请注意<=
):
int ii;
for(ii=1;ii<=5;ii++);
printf("ii = %d",ii);
打印出ii = 6
。
你能解释一下这里发生了什么吗?为什么for
循环以分号结束?
答案 0 :(得分:7)
for
循环的正文为空:
int ii;
for(ii=1;ii<5;ii++);
// ↑ body of the for loop
printf("ii = %d",ii);
代码将ii
设置为1
,然后递增ii
直到它为5
而不在for
循环体中执行任何操作,最后打印{{ 1}}。
如果您要打印数字1到4,则应将ii
调用放入printf
循环体:
for
答案 1 :(得分:2)
for (i = 0; i < 5; i++);
从0到4迭代,每次迭代都不做任何事情。这没有什么是空的陈述,即分号。
这可能有意义,例如这里:
for (i = 0; i < 5; printf ("%d", i++) );
答案 2 :(得分:1)
由于for循环包含一个空语句(末尾用分号),因此ii
的值是导致循环退出的值。因此,当ii<5
不为真时(因为ii为5),您会看到5个输出。
答案 3 :(得分:1)
请记住,循环声明的增量部分发生在循环的末尾,因此输出符合预期 - 在第一个示例中,循环在ii变为5之后停止(循环体,为空,执行) ii
为0到4)。
第二个循环的(空)体执行六次(从0到5),当ii变为6时停止。
答案 4 :(得分:1)
使用您的代码,获取输出6是正确的。这是流程: 你的'ii'分别增加到5和6(到第一和第二循环)。因为你循环for循环而没有'需要'来执行正文
为(ⅱ= 1;ⅱ小于5;ⅱ++); #sumolon意味着你在不需要执行主体的情况下循环它,这意味着它在没有做任何事情的情况下循环,除了递增计数器。
for(...) { // 身体 }
如果你“需要”执行身体,没有semicolo。
答案 5 :(得分:0)
在for之后删除分号。当表达一个没有{}的for循环时,它将在语句后循环执行代码,直到找到;在你的情况下,for循环没有找到要执行的语句。在for和你的下一行代码之后删除分号,print语句将被执行。