C++ 如何使std::getline()包含最后一个空行?
当使用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,直到出现以下情况之一(按列出的顺序选中
//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
确实有。