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. 该fgetc()函数返回一个int,因为EOF它被定义为一个。

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 回答