2

一部の C コードをデバッグしようとしているときに、無限ループの前に配置すると printf() が実行されないことに気付きました。これがなぜなのか誰か知っていますか?実際にはそれほど大したことではありませんが、デバッグに関しては悪夢です。

#include<stdio.h>

int main()
{
  int data;

  printf("This prints fine.\n");  

  printf("Enter data: ");
  scanf("%d", &data);

  printf("This should print but it doesn't.\n");

  while(1)
  {
    //Infinite Loop
  }

  return 0;
}
4

3 に答える 3

2

printf() を呼び出すと、プログラムが終了するか改行文字が検出された後に出力が表示されます。しかし、 printf() の後に無限ループを呼び出しているため、プログラムは終了せず、バッファからの出力は表示されません。

fflush(stdout)バッファからの出力を強制的に表示するために使用します

stdout 標準出力ストリームは、アプリケーションのデフォルトの出力先です。ほとんどのシステムでは、通常、デフォルトでテキスト コンソール (通常は画面上) に送信されます。

このfflush()関数により、システムはバッファを空にします

于 2012-12-02T08:30:48.037 に答える
0

try __fpurge(stdout)出力バッファをクリアします

于 2012-12-02T10:59:33.043 に答える
0

それらはラインバッファとブロックバッファという概念です。画面に書きたいものはすべてバッファに入れられます。ライン バッファとは、新しい行 [\n] が見つかったときに「バッファをフラッシュする」ことを意味します。これは、文字列が画面に表示されることを意味します。画面。上記の場合、改行 [\n] で十分です

于 2012-12-03T12:49:50.220 に答える