2017-04-24 116 views
-4

爲什麼下面的代碼導致無限循環?爲什麼for循環變成無限循環?

#include <stdio.h> 
void main() 
{ 
    int i; 
    for(i=0;i!=12;i++) 
    { 
    printf("%d\n",i); 
    i=12; 
    } 
} 
+3

'I ++'設置在循環結束excecuted所以我將成爲'I = 13' –

+0

問自己是否(12 + 1)== 12是有史以來真。 – WhozCraig

+0

因爲循環操作後'我++,所以你設置'I = 12'比你用'加一'執行我++'然後進行新的迭代用來檢查是否'我!= 12' ..我建議你,如果你不完全不知道程序在做什麼,用調試器找出它在做什麼。 – Gondil

回答

1

i++在循環結束時excecuted所以i將成爲13

2

因爲i總是不等於12當它是由環檢查。您每次循環迭代後執行i++,所以i總是等於13時,它的檢查。

您可以完全省略i++部分,或者設置i = 11;來代替完成相同的操作。 (當然,因爲在這種情況下,「同樣的事情」是永遠只希望在循環的單次迭代,你並不真的需要擺在首位的循環。但我認爲這只是一個人爲的學習鍛鍊。)

1

它發生是因爲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時終止,因此它將永遠運行。