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,则可能发生这种情况。怎么会发生这种情况?
答案 0 :(得分:2)
让s
成为int
。 fgetc()
function会返回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