尝试读取/打印文件的内容,其中最后一行不以'\ n'结尾。程序只是错过了该数据
while ( !readFile.eof() ) {
string s;
getline( readFile, s );
if ( readFile.eof() ) break;
//operate on data...
cout << s << endl;
}
请参阅Why is iostream::eof inside a loop condition (i.e. `while (!stream.eof())`) considered wrong?
您需要将std::getline()
调用直接移到while
语句中:
string s;
while ( getline( readFile, s ) ) {
//operate on data...
cout << s << endl;
}
循环将一直运行,直到到达EOF
,并且没有更多数据可读取。最后一行是否用换行符定界是irrelevant,因为std::getline()
将做正确的事情并返回最后一行的数据,即使它没有定界。
照原样进行:
getline( readFile, s );
if ( readFile.eof() ) break;
//operate on data...
如果没有分隔最后一行,则会过早中断循环,因为std::getline()
将在eofbit
上设置readFile
,但是s
实际上将在其中包含最后一行的数据,然后您将忽略该数据。通过直接将std::getline()
移到while
语句中,它将依赖于流的bool
conversion operator,当仅设置bool
时,该流将返回true
,从而允许循环处理最后一条非定界行。当下一个循环迭代尝试读取eofbit
时,EOF
将在流上设置std::getline()
,使failbit
运算符返回bool
,从而中断循环。
为了从文件中读取数据的最后一行,其中最后一行不包含'\ n'字符,请使用三元运算符创建一个分支条件来检查eof“ \ 3”字符。
即
false