2011-02-26 5 views
9

このコードをコンパイルして実行すると(それはもっと大きなプログラムの一部です)、Linuxはwhileループの途中に入り、単純に動作を停止します。Cがwhileループの途中でスタックするのはなぜですか?

以下のコードは、time: 0を出力してハングアップし、処理を中断するまで何もしません。なぜ地球上でtime: 0を印刷しますが、次のような健全性チェックのラインはありませんか?

while (i < 5) 
{ 
    printf("time: %d\n",elapsedTime); 
    printf("sanity check"); 
    foo(); 
    i++; 
} 

答えて

22

通常、出力はバッファリングされ、フラッシュまたは改行の後にのみ書き込まれます。

printf("sanity check"); 

改行がないため、この後に無限ループで実行すると、表示されません。 は

printf("sanity check\n"); 

または

printf("sanity check"); 
fflush(stdout); 

と交換してください、あなたはそれが表示されます。

+0

良い。私はその機能について心配していたが、私はそれに到達していないと思った。今、私が*私*であることを知ったので、私はデバッグを続けることができます。ありがとう!私は10分で答えを受け入れます。私はできます。 –

+1

@Raven:デバッグにデバッガを使用していた(その名前に手がかりがある)なら、それはそれまでにあったことを知っていたでしょうし、おそらくそれが最終的に失敗した理由です。 – Clifford

+0

@Clifford - yup。私はVisual StudioとC#の開発に甘やかされてきました。残念ながら、私はVSにプレーンなC環境を扱うことができないので、JEditだけで悩んでいます。 –

関連する問題