3
int main()
{
int c;

  while ( (c = getchar())  != EOF)
    putchar(c);

}

ここで、上記のプログラムを実行すると、

$./a.out this is the line which storage location is mystery tome -- LINE1 this is the line which storage location is mystery tome -- LINE2

LINE1の文字を入力したとき、関数 getchar() と putchar() が文字を処理していると思いますか、それとも間違っていますか?

これが私の質問です。

Enter キーを押した後、LINE1はLINE2に正確に複製されます。これは、別の場所にバッファリングされているはずなので、どこに保存されているのでしょうか? また、なぜこのように実装されているのですか?

4

3 に答える 3

2

システムのデフォルトの動作は、改行が表示されるまで入力をバッファリングすることです。これにより、プログラムが表示する前に、バックスペースを押して行を編集することができます。

于 2013-03-08T12:40:37.880 に答える
2

行全体を入力するまで、プログラムはシェルからの入力を受け取りません。

于 2013-03-08T12:35:39.580 に答える
0

入力ストリームをプログラムに提供し、そこから出力ストリームを取得するためのシステムの I/O メカニズムは省略します。(私は彼らを知らないので)

このgetchar()関数は、 stdinから1文字を取得 するだけです。一方、1文字を出力ストリーム ( stdout )に入れるだけです。したがって、ここにはバッファ マジックは含まれていません。期待どおりのものを取得しているだけです。 stdoutのstdinに入れられたものの完全なコピーです。putchar()

于 2013-03-08T13:42:58.577 に答える