【问题标题】:How to determine whether it is EOF when using getline() in c++?c++中使用getline()时如何判断是否为EOF?
【发布时间】:2009-08-12 03:19:31
【问题描述】:
string s;
getline(cin,s);

while (HOW TO WRITE IT HERE?)
{
    inputs.push_back(s);    
    getline(cin,s);
}

【问题讨论】:

    标签: c++ stream


    【解决方案1】:

    由于今天懒得给出完整的答案,我就贴一下 Freenode 上##c++ 中真正有用的机器人要说的话:

    使用“while (!stream.eof()) {}”几乎肯定是错误的。改用流的状态作为测试值:while (std::getline(stream, str)) {}。更多解释见http://www.parashift.com/c++-faq-lite/input-output.html#faq-15.5

    换句话说,你的代码应该是

    string s;
    
    while (getline(cin, s))
    {
        inputs.push_back(s);    
    }
    

    【讨论】:

    • +1。在 C++ 中(可悲的是为数不多的)其中一次正确的选择是直截了当和惯用的。
    【解决方案2】:
    string s;
    getline(cin,s);
    
    while (!cin.eof)
    {
            inputs.push_back(s);    
            getline(cin,s);
    }
    

    【讨论】:

    • 是的,它有效,是的,它回答了上述问题,但恐怕我更喜欢 coppro。除了更简单和更易于维护之外,如果发生其他 I/O 错误,coppro 的答案将正确退出。
    • 你是对的。我没有通过“知道它的 eof 时间”部分。
    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多