为什么循环无限?

时间:2012-10-28 18:35:16

标签: c++ file io stdin eof

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

1 个答案:

答案 0 :(得分:2)

s成为intfgetc() function会返回int,因为EOF被定义为一个。

int s;

将其更改为:

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

此外,使用EOF时不会自动读取stdin,除非您使用的是管道。

以这种方式思考......

程序等待用户输入字符。程序如何知道是否已达到EOF或用户正在考虑下一步要键入的内容。用户必须通过键入EOFctrl+D发送到该计划。

例外情况是您将stdin重定向到管道。例如,如果您将程序编译为a.out

cat "myfile" | a.out