while(getline(fileIn,line))
{
fileOut <<line<<endl;
}
while(getline(fileIn,line))
{
if(fileIn.eof())
break;
fileOut <<line<<endl;
}
我已经尝试了这两个代码段,第二个也读取过去的文件结束,并没有打破。谁能告诉我为什么?如何在使用getline时检测文件结束?
我只是从文件中读取数据并写出来。
while(getline(fileIn,line))
{
fileOut <<line<<endl;
}
while(getline(fileIn,line))
{
if(fileIn.eof())
break;
fileOut <<line<<endl;
}
我已经尝试了这两个代码段,第二个也读取过去的文件结束,并没有打破。谁能告诉我为什么?如何在使用getline时检测文件结束?
我只是从文件中读取数据并写出来。
是“fileIn”和“eof()”之间的逗号吗? (第二个例子)
我喜欢做的一件事是在我的fstreams上启用。 YMMV:
ifstream file;
file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit);
eofbit很少做用户想要的事情,并且为它启用例外通常是一个非常糟糕的主意。足够使failbit具有完整的错误处理能力,但如果程序读取到最后,我不会推荐这样做,因为这会导致异常在非例外(但是除外)情况下抛出。 – Tronic 2010-03-12 01:10:58
这是一个我修正它的错字。但问题依然存在。 – djones2010 2010-03-12 01:11:44
@Tronic好点 – pestilence669 2010-03-12 02:45:52
第一个代码是正确的,它肯定会在文件中没有数据时结束循环。
getline
函数返回您正在阅读的流的引用。如果您尝试通过 EOF读取,则它的计算结果为false。当您读取文件的最后一行时,该流仍处于良好状态。所以你永远不会在第二块代码中达到if-test。
发布更多代码。 – 2010-03-12 01:15:46