4
scanf("%9s", line);

stdin (最大 9 シンボル) から 1 行を読み取り、その後、ユーザー入力からすべての文字を読み取ったかどうかを確認したいと考えています。それを行うエレガントな方法はありますか?

4

3 に答える 3

0

最初にデータをより大きな文字列に読み取ってから、その長さを取得できます。ある時点で、入力バッファーに残っているものをすべて取り除きたいとします。これを行うには、一部のシステムで fflush を使用し、他のすべてのシステムで fpurge を使用できます。

大きなバッファをいっぱいにして、残りを削除するために使用できるサンプル コードを次に示します。特殊文字が含まれている場合、クリーニング関数は最後の改行を削除するか、文字列を早期に終了します。

void userInput( char * str, int size );
void get( char * str, int size );  
void clean( char * str, int size );  
void flush( void );

void userInput( char * str, int size )
{
    get( str, size );
    clean( str, size );   
    flush();
}

void get( char * str, int size )
{
    memset( str, 0, size );
    fgets ( str, size, stdin );
}

void clean( char * str, int size )
{
    char * c;   
    str [size -1] = 0;
    c = str;
    while( *c >= ' ' || *c < 0 ) ++c;
    *c = 0;
}

void flush( void )
{
    //the ifdef approach does not work in reality.
    //this is a pseudo case for your benefit.
    #ifdef fpurge 
        fpurge(stdin);
    #else
        fflush(stdin);
    #endif
}
于 2013-08-07T17:18:01.453 に答える