0
char s;
list<char> inp;

while(s=fgetc(stdin),s!=EOF)
{
    inp.push_back(s);
    printf("%c",s);
}
for(list<char>::iterator n=inp.begin();n!=inp.end();n++)
{
    cout<<*n;
}

上記のコードの while ループは決して終了しませんか? これは、標準入力から EOF を受信しない場合に発生する可能性があります。これはどのように起こりますか?

4

1 に答える 1

2

を作りsますint。は 1 として定義されているため、このfgetc()関数は を返します。intEOF

int s;

次のように変更します。

while((s=fgetc(stdin)) != EOF)
{
    inp.push_back(s);
    printf("%c",s);
}

また、パイプを使用していない場合は、使用EOF時に自動的に読み込まれません。stdin

このように考えてみてください...

プログラムは、ユーザーが文字を入力するのを待ちます。EOFに到達したか、ユーザーが次に何を入力するかを考えているかどうかを、プログラムはどのように知るでしょうか。ユーザーは、 とEOF入力してプログラムに送信する必要がありますctrl+D

stdin例外は、パイプにリダイレクトした場合です。たとえば、プログラムを次のようにコンパイルした場合a.out:

cat "myfile" | a.out
于 2012-10-28T18:36:54.460 に答える