0

最初に getchar() を呼び出し、標準入力/出力に文字を入力します。これは、scanf() もこれらの文字をフェッチできるためです。scanf() を呼び出す前に、バッファーを空にしたいのですが、プログラムは次のとおりです。

int main()
  {
    getchar();   // i input some characters here , "abcdefgh" 


    ------ // here i need some statement that will empty standard input/output.

    int a;
    scanf("%d",&a);  // so if buffer is empty, this prompt me to enter chacter.
                                    // if i enter 7 
    printf("%d",a);                // this should print 7

    }
4

2 に答える 2

0

入力ストリームのフラッシュは未定義の動作です。出力バッファについては、これを試してください:

fflush(stdout);

setbuf(stdout,NULL);

またfpurge、関数fpurge()は、指定されたストリームにバッファリングされた入力または出力を消去します。出力ストリームの場合、これは書き込まれていない出力を破棄します。入力ストリームの場合、これは基になるオブジェクトから読み取られた入力を破棄します。注:fpurgeは非標準であり、移植性がありません。

stackoverflow に関するこの投稿を見てください: I am not able to flush the stdin

于 2013-07-01T13:11:24.600 に答える
0

を使用しfflush(stdin)ます。のマンページからfflush()

入力ストリームの場合、fflush() は、基になるファイルからフェッチされたが、アプリケーションによって消費されていないバッファリングされたデータを破棄します。ストリームのオープン ステータスは影響を受けません。

ただし、これは標準ではないことに注意してください。
これを行うこともできます

while((c = getchar()) != '\n' && c != EOF)
    /* discard */ ;

これにより、改行までのすべての余分な文字が破棄されます。
出力バッファの場合:fflush(stdout);

于 2013-07-01T12:54:23.627 に答える