以下のコードが無限ループになるのはなぜですか?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++
それがループによって確認されていますときi
が12
に等しいことがないのでそうi
が13
なり、ループの最後でexcecutedされます。チェックすると、i
は常に13
に等しいので、各ループの反復の後にi++
を実行します。
i++
部分を完全に省略するか、代わりに同じことを達成するためにi = 11;
を設定することができます。 (もちろん、この場合の「同じこと」はループの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
のときだけ終了するので、永遠に実行されます。
ループの最後に 'i ++'が実行されるので、 'i = 13'になります。 –
(12 + 1)== 12かどうかを確認してください。 – WhozCraig
ループ操作の後に 'i ++'が実行されるので、 'i = 12'を' i ++ 'でインクリメントしてから' i!= 12'をチェックする新しい繰り返しが実行されるので、プログラムが何をしているのか正確に知っているのではなく、デバッガを使って何をしているのかを知ることができます。 – Gondil