为什么下面的代码导致无限循环?为什么for循环变成无限循环?
#include <stdio.h>
void main()
{
int i;
for(i=0;i!=12;i++)
{
printf("%d\n",i);
i=12;
}
}
为什么下面的代码导致无限循环?为什么for循环变成无限循环?
#include <stdio.h>
void main()
{
int i;
for(i=0;i!=12;i++)
{
printf("%d\n",i);
i=12;
}
}
i++
在循环结束时excecuted所以i
将成为13
因为i
总是不等于12
当它是由环检查。您每次循环迭代后执行i++
,所以i
总是等于13
时,它的检查。
您可以完全省略i++
部分,或者设置i = 11;
来代替完成相同的操作。 (当然,因为在这种情况下,“同样的事情”是永远只希望在循环的单次迭代,你并不真的需要摆在首位的循环。但我认为这只是一个人为的学习锻炼。)
它发生是因为for
循环检查循环条件前增加变量。
下面是与for
循环改写为while
循环的代码:
#include<stdio.h>
void main()
{
int i;
i=0;
while(i!=12)
{
printf("%d\n",i);
i=12;
i++;
}
}
下面是它的输出(前几行):
0
13
13
13
...
通过每一次循环中,代码将i
设置为12,然后在检查条件并重新启动循环之前立即将其增加到13。该循环只会在i==12
时终止,因此它将永远运行。
'I ++'设置在循环结束excecuted所以我将成为'I = 13' –
问自己是否(12 + 1)== 12是有史以来真。 – WhozCraig
因为循环操作后'我++,所以你设置'I = 12'比你用'加一'执行我++'然后进行新的迭代用来检查是否'我!= 12' ..我建议你,如果你不完全不知道程序在做什么,用调试器找出它在做什么。 – Gondil