3

私は繰り返し実行するいくつかのコードを持っています:

printf("続行しますか? Y/N: \n");
キーププレイ = getchar();

次の私のコードは実行されており、入力を待ちません。getchar が 2 番目の時間に文字として '\n' を使用していることがわかりました。これはsdioが持っているバッファが原因であると思っているので、「Y\n」または「N\n」であった最後の入力を保存します。

私の質問は、getchar を使用する前にバッファをフラッシュするにはどうすればよいですか?

4

3 に答える 3

5

入力ストリームをフラッシュすると、未定義の動作が発生します。

int fflush(FILE *ostream);

ostream が、最新の操作が入力されていない出力ストリームまたは更新ストリームを指している場合、fflush 関数により、そのストリームの未書き込みデータがホスト環境に配信され、ファイルに書き込まれます。それ以外の場合、動作は未定義です。

入力ストリームを適切にフラッシュするには、次のようにします。

int main(void)
{
  int   ch;
  char  buf[BUFSIZ];

  puts("Flushing input");

  while ((ch = getchar()) != '\n' && ch != EOF);

  printf ("Enter some text: ");

  if (fgets(buf, sizeof(buf), stdin))
  {
    printf ("You entered: %s", buf);
  }

  return 0;
}

なぜ fflush(stdin) が間違っているのかとFlush the input bufferを参照してください。

于 2011-01-01T07:37:38.187 に答える
1

printf の前に fflush() と flushall() を使用する

于 2011-01-01T07:31:42.743 に答える