用getline读取EOF(std :: cin,variable) - C ++

时间:2017-04-04 00:41:51

标签: c++ string queue getline eof

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;
}

为什么我不能“而(getline(cin,line))”?

1 个答案:

答案 0 :(得分:0)

你可以while(getline(cin, line))实际上&& !cin.eof()没有做任何事情,正如 Sam Varshavchik 所指出的那样,因为getline做了所有工作并退出了循环通过将流设置为自己的失败状态,因此永远不会处理cin.eof

  

如果在[输入流]中到达文件末尾或者在输入操作期间发生了其他错误,则提取也会停止。

这在cplusplus.com

的文档中说明