forループの間違い探しテスト

find-bugs-test-for-loop.png

次のコードは何が間違ってるでしょう?

unsigned int i;
for(i=100;i>=0;--i){
    printf("%d\n",i);
}

答え

さっきのコードを実行してみると、一生終わらないのがわかると思います。
なんででしょう?
まず、unsigned intなのだからiは絶対にマイナスになりません。
コードを実行してみるとマイナスの値が出力されると思いますが、
iの値が0からデクリメントして、実際にはintの最大値になってます。
なのにfor文の終了条件がi>=0なので一生終わることができません。
終了条件は

i>0

にすべきでしょう
そして、そもそもunsignedなのに%dで出力していては、思った通りの結果が出力されません。

%u

を使うべきです。

サポートサイト Wikidot.com