電子書籍の厳選無料作品が豊富!

C言語にお詳しい方、ご回答お願いします。

fflush関数は、「バッファに格納されているデータを吐き出す。」とあるのですが、具体的にどのような動作をするのでしょうか?

(1)fflush(stdin),fflush(stdout)とそれぞれ記述するとどのような動作をするのか。

(2)データをフラッシュしたいときとは、具体的にどんなときか。(scanfなどで続けてデータの入力を行うこと以外に)

setbuf関数は、「出力バッファをユーザバッファに指定」とあるのですが、具体的にどういう意味なのでしょうか?

(1)setbuf(stdout,buf)、setbuf(stdin,buf)とそれぞれ記述するとどのような動作をするのか。

よろしくお願いします。

A 回答 (1件)

> (1)fflush(stdin),fflush(stdout)とそれぞれ記述するとどのような動作をするのか。



fflush(stdin)とすると動作が未定義になります。したがって、何がおきるか分かりません。
fflush(stdout)の場合は、printf等で出力したけれども、まだバッファにたまっている文字が実際の装置(コンソールやファイルなど)に出力されます。

> (2)データをフラッシュしたいときとは、具体的にどんなときか。(scanfなどで続けてデータの入力を行うこと以外に)

例えば、相手と対話的にやり取りを行う必要がある場合などです。シリアルポート等で通信を行う場合はもちろん、次のようなケースも考えられます。

fputs("入力> ", stdout);
fgets(str, sizeof(str), stdin);

上の例では、"入力> "がコンソールに出力される前にfgetsが入力を求めてしまうかもしれません。そのため、fgetsの前にfflush(stdout);を挿入することで、入力を求める前に"入力> "が確実に出力されるようになります。
なお、「scanfなどで続けてデータの入力を行うこと」に対しては、fflushは何の役にも立ちません。

> (1)setbuf(stdout,buf)、setbuf(stdin,buf)とそれぞれ記述するとどのような動作をするのか。

stdoutまたはstdinが管理するバッファをbufに設定し、フルバッファリングを行います。デフォルトでは、stdoutやstdinがどんなバッファリングを行うかは環境に依存します。
    • good
    • 0
この回答へのお礼

お礼が遅くなってしまってすいません。
おかげさまで理解が深まりました。
ありがとうございました。

お礼日時:2008/01/16 12:38

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!