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,则可能会发生这种情况。这怎么可能发生?
制作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