【发布时间】:2017-08-29 00:31:00
【问题描述】:
EOF 不起作用。请帮忙。谢谢!
#include <iostream>
#include <string>
#include <queue>
using namespace std;
int main()
{
string line; // string
queue<string> a; // queue for output
while (getline(cin, line) && !cin.eof())
{ // EOF working?
for (int i = 0; i < line.size(); i++)
if (line[i] != ' ' && line[i] % 2 == 0)
line[i] -= 32;
a.push(line);
}
while (!a.empty())
{
cout << a.front() << endl;
a.pop();
}
return 0;
}
为什么我不能“while(getline(cin, line))”?
【问题讨论】:
-
因为如果
getline()遇到文件结束条件,它会将流设置为失败状态,并且在布尔上下文中它将评估为false。cin.eof()永远不会被检查。 -
从好的方面来说,如果
getline(cin,line)失败,你无论如何都会退出。你不需要它。如果您甚至注意到!cin.eof()不起作用,那么您一定有其他错误。例如,cin没有 eof,除非您关闭输入流。如果没有其他事情发生,getline将一直等待用户继续输入。尝试 ctrl + z 或 ctrl + d。一个是 Windows,另一个是 Linux。不记得是哪个了。 -
“EOF 不起作用”不是一个有用的问题描述。确切地说,您的程序的输入是什么?结果是什么?你的预期结果是什么?请参阅How to Ask 和minimal reproducible example 了解更多信息。
-
例如,如果 STDIN 已被重定向到输入文件,那么
EOF是有意义的,但std::getline()仍然会处理这种情况。所以还是没有必要手动检查!cin.eof()。
标签: c++ string queue getline eof