当使用fstream读取文件信息,通过good或者eof来处理文件中的行时,会出现多读一行的情况,如下面代码:
fstream myfile;
string line;
myfile.open("test.in",iso:in);
if (myfile.is_open()) {
while (myfile.eof()) {
getline(myfile.line)
cout<<line<<endl;
}
}
本来在读到文件尾部时应该停下来,但是while循环会在之后再次执行一次。
但是把以上改为:
fstream myfile;
string line;
myfile.open("test.in",iso:in);
if (myfile.is_open()) {
while (true) {
getline(myfile.line)
if (myfile.eof()) {
break;
}
cout<<line<<endl;
}
}
文件读完最后一行后,当时位置只在最后一行文本,并不是eof,当getline在读一次,则什么也读不到,即是空。这个时候myfile.eof()返回true。