fflush

[機能]

  ストリームをフラッシュします.ファイルが出力用にオープンされているときは,そのバッファの内容をファイルに書き込みます.また,入力用にオープンされているときは,バッファの内容をクリアします.成功すると 0 を返します.

[形式]
#include <stdio.h>

int fflush(FILE *stream)
	stream : FILE 構造体へのポインタ		
[使用例]

  1. 標準入力用バッファをフラッシュします.scanf 関数を実行すると,改行文字( '\n' )がバッファに残ります.そのため,「2)文字列を入力してください:」に応じて入力しようとしても,次の gets 関数がバッファに残っている改行文字を読み込んで,それを出力( printf 関数)してしまうため,データを入力する前に次の入力を促すメッセージ(「3)文字列を入力してください:」)が出力されてしまいます.しかし,このメッセージに対応した入力を読み込んだあとで,fflush 関数を使用しているため,次の gets 関数は期待通りの処理を行っています.
    #include <stdio.h>
    
    int main()
    {
    	char str[81];
    /*
    		 fflush関数を使用しない場合
    */
    	printf("1)文字列を入力してください:");
    	scanf("%s", str);
    	printf("     %s\n", str);
    	printf("2)文字列を入力してください:");
    	gets(str);
    	printf("     %s\n", str);
    /*
    		 fflush関数を使用する場合
    */
    	printf("3)文字列を入力してください:");
    	scanf("%s",str);
    	printf("     %s\n", str);
    	fflush(stdin);
    	printf("4)文字列を入力してください:");
    	gets(str);
    	printf("     %s\n", str);
    
    	return 0;
    }
    			
    (出力)
    1)文字列を入力してください:aaa
         aaa
    2)文字列を入力してください:
    3)文字列を入力してください:bbb
         bbb
    4)文字列を入力してください:ccc
         ccc			
[参照]

fclose, setvbuf

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引