例では:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
よくわかりません。putchar()は文字を出力しますが、EOFの後にすべての文字を出力するのはなぜですか。また、これらすべての文字をどこに記憶しているのでしょうか。ありがとう。
例では:
#include <stdio.h>
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
よくわかりません。putchar()は文字を出力しますが、EOFの後にすべての文字を出力するのはなぜですか。また、これらすべての文字をどこに記憶しているのでしょうか。ありがとう。
これはバッファリングと呼ばれ、オペレーティングシステムによって実行されます。通常、ラインバッファリングを実行し、メモリに入力したすべての文字を保存し、改行が発生したときにすべてをファイルに書き込みます。これにより、ファイル操作に他の操作よりもはるかに時間がかかるため、リソースを節約できます。したがって、すべての文字で出力を行う代わりに、大量の文字がバッファに集まるのを待って、一度にすべてを書き出します。
これは、プログラマーであるあなたが心配する必要のない、OSによって行われる巧妙な操作です。キャラクターを1つずつ投げて、残りをOSに独自の方法で処理させます。
[これは答えではありませんが、コメントにコードを入れることはできません]
私はあなたがこのような何かを意味したと思います:
#include <stdio.h>
main()
{
long nc;
nc = 0;
char c;
while ((c = getchar()) != EOF)
{
putchar(c); /* prints one char */
++nc;
}
printf("%ld\n", nc); /* prints the number of characters read */
}
いいえ、このコードは入力を空にし、フラッシュの前に残った文字の数を書き込むだけです。
これは、入力ファイル(stdin)に文字が残っていないことを確認するためです。
putcharは、入力時にcharをバッファに入れ、次に、出力されたラインワードを画面に表示します。