循环语句不常见

时间:2011-06-01 02:43:30

标签: c# c loops

在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循环以分号结束?

6 个答案:

答案 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语句将被执行。