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