爲什麼下面的代碼導致無限循環?爲什麼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