6

例では:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

よくわかりません。putchar()は文字を出力しますが、EOFの後にすべての文字を出力するのはなぜですか。また、これらすべての文字をどこに記憶しているのでしょうか。ありがとう。

4

4 に答える 4

8

これはバッファリングと呼ばれ、オペレーティングシステムによって実行されます。通常、ラインバッファリングを実行し、メモリに入力したすべての文字を保存し、改行が発生したときにすべてをファイルに書き込みます。これにより、ファイル操作に他の操作よりもはるかに時間がかかるため、リソースを節約できます。したがって、すべての文字で出力を行う代わりに、大量の文字がバッファに集まるのを待って、一度にすべてを書き出します。

これは、プログラマーであるあなたが心配する必要のない、OSによって行われる巧妙な操作です。キャラクターを1つずつ投げて、残りをOSに独自の方法で処理させます。

于 2010-02-02T23:56:33.820 に答える
2

[これは答えではありませんが、コメントにコードを入れることはできません]

私はあなたがこのような何かを意味したと思います:

#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 */
}
于 2010-02-03T03:18:47.510 に答える
1

いいえ、このコードは入力を空にし、フラッシュの前に残った文字の数を書き込むだけです。

これは、入力ファイル(stdin)に文字が残っていないことを確認するためです。

于 2010-02-02T23:53:09.103 に答える
1

putcharは、入力時にcharをバッファに入れ、次に、出力されたラインワードを画面に表示します。

于 2011-06-12T11:58:46.130 に答える