一个不寻常的for循环语句
本文关键字:for 循环 语句 不寻常 一个 | 更新日期: 2023-09-27 17:58:02
在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);
打印出CCD_ 3。
你能解释一下这里发生了什么吗?为什么for
循环以分号结尾?
for
循环的主体为空:
int ii;
for(ii=1;ii<5;ii++);
// ↑ body of the for loop
printf("ii = %d",ii);
该代码将ii
设置为1
,然后递增ii
直到5
,而不在for
循环体中执行任何操作,最后打印ii
。
如果你想打印数字1到4,那么你应该把printf
调用放在for
循环体中:
int ii;
for(ii=1;ii<5;ii++) {
printf("ii = %d",ii);
}
for (i = 0; i < 5; i++);
从0到4进行迭代,每次迭代都不执行任何操作。这个nothing是一个空语句,它是分号。
这是有意义的,例如:
for (i = 0; i < 5; printf ("%d", i++) );
由于for循环包含一个空语句(末尾为分号),因此ii
的值是导致循环退出的值。所以当ii<5
不为真时(因为ii是5),您会看到5的输出。
请记住,循环声明的增量部分发生在循环的末尾,因此输出正如预期的那样——在第一个示例中,循环在ii变为5后停止(循环体为空,在ii
为0到4的情况下执行)。
第二个循环的(空)主体执行六次(从0到5),当ii变为6时停止。
使用您的代码,获得输出6是正确的。流程如下:您的"ii"将分别递增到5和6(第一个和第二个循环)。因为您正在循环for循环,而不需要执行正文
对于(ii=1;ii<5;ii++);#分号意味着循环它而不需要执行正文,这意味着它循环时除了递增计数器之外什么都不做。
对于(…){//车身}
如果您"需要"执行正文,则不使用分号。
删除for后面的分号,当表达不带{}的for循环时,它将在语句后面的循环中执行代码,直到找到;在您的情况下,for循环找不到要执行的语句。删除for和下一行代码后的分号,print语句将被执行。