2017-04-24 19 views
-4

以下のコードが無限ループになるのはなぜですか?forループが無限ループに変わるのはなぜですか?

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

ループの最後に 'i ++'が実行されるので、 'i = 13'になります。 –

+0

(12 + 1)== 12かどうかを確認してください。 – WhozCraig

+0

ループ操作の後に 'i ++'が実行されるので、 'i = 12'を' i ++ 'でインクリメントしてから' i!= 12'をチェックする新しい繰り返しが実行されるので、プログラムが何をしているのか正確に知っているのではなく、デバッガを使って何をしているのかを知ることができます。 – Gondil

答えて

1

i++それがループによって確認されていますときi12に等しいことがないのでそうi13

2

なり、ループの最後でexcecutedされます。チェックすると、iは常に13に等しいので、各ループの反復の後にi++を実行します。

i++部分を完全に省略するか、代わりに同じことを達成するためにi = 11;を設定することができます。 (もちろん、この場合の「同じこと」はループの1回の反復だけを望んでいるため、最初はループを必要としませんが、これはちょっと工夫された学習であると思います)

1

ループの状態を確認する前に、forループが変数をインクリメントするために発生します。ここで

whileループのように書き換えるforループとコードです:ループを通る

0 
13 
13 
13 
... 

たびに、コード:

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

そしてここでは、その出力(最初の数行)ですiを12に設定してから、すぐに13をインクリメントしてから、条件を確認してループを再開します。ループは、i==12のときだけ終了するので、永遠に実行されます。

関連する問題