C++ 如何使std::getline()包含最后一个空行?

C++ 如何使std::getline()包含最后一个空行?,c++,std,getline,C++,Std,Getline,当使用std::getline从文件中读取行时,我需要它拾取文件末尾的每一个空行 //add each line to lines while (std::getline(file, line)) lines.push_back(line); getline()总是跳过文件的最后一个空行,而不是将其添加到行向量中。如果文件中有最后一个空行,我需要将其包括在内。我该怎么做?我认为这是: 从输入中提取字符并将其附加到str,直到出现以下情况之一(按列出的顺序选中

当使用std::getline从文件中读取行时,我需要它拾取文件末尾的每一个空行


    //add each line to lines
    while (std::getline(file, line))
        lines.push_back(line);

getline()总是跳过文件的最后一个空行,而不是将其添加到行向量中。如果文件中有最后一个空行,我需要将其包括在内。我该怎么做?

我认为这是:

从输入中提取字符并将其附加到str,直到出现以下情况之一(按列出的顺序选中)

a) 输入时的文件结束条件,在这种情况下,getline设置eofbit。

如果出于任何原因(甚至不是丢弃的分隔符)未提取任何字符,getline将设置failbit并返回

failbit
将导致流的
bool
转换运算符返回false,从而中断循环

因此,我认为您必须做的是,在每次成功读取时,检查是否设置了
eofbit
。如果设置,则最后一行由EOF终止,而不是由换行符终止,因此不会有后续行要读取。如果未设置,则将有另一行要读取,无论该行是否为空

while(std::getline(文件,行)){ 线。推回(线); 如果(file.eof())中断; } if(file.eof()&&file.fail()){ 行。将_向后推(“”); }

它不会拾取最后一个空行。但我找不到解决方法。请注意,
line\n行\n
现在有了最后一个空行,但此
line\n\n行\n
确实有。