2010-03-12 75 views
1
while(getline(fileIn,line)) 
{ 

    fileOut <<line<<endl; 

} 


while(getline(fileIn,line)) 
{ 

    if(fileIn.eof()) 
    break; 
    fileOut <<line<<endl; 

} 

我已经尝试了这两个代码段,第二个也读取过去的文件结束,并没有打破。谁能告诉我为什么?如何在使用getline时检测文件结束?

我只是从文件中读取数据并写出来。

+2

发布更多代码。 – 2010-03-12 01:15:46

回答

0

是“fileIn”和“eof()”之间的逗号吗? (第二个例子)

我喜欢做的一件事是在我的fstreams上启用​​。 YMMV:

ifstream file; 
file.exceptions(ifstream::eofbit | ifstream::failbit | ifstream::badbit); 
+1

eofbit很少做用户想要的事情,并且为它启用例外通常是一个非常糟糕的主意。足够使failbit具有完整的错误处理能力,但如果程序读取到最后,我不会推荐这样做,因为这会导致异常在非例外(但是除外)情况下抛出。 – Tronic 2010-03-12 01:10:58

+0

这是一个我修正它的错字。但问题依然存在。 – djones2010 2010-03-12 01:11:44

+0

@Tronic好点 – pestilence669 2010-03-12 02:45:52

0

第一个代码是正确的,它肯定会在文件中没有数据时结束循环。

3

getline函数返回您正在阅读的流的引用。如果您尝试通过 EOF读取,则它的计算结果为false。当您读取文件的最后一行时,该流仍处于良好状态。所以你永远不会在第二块代码中达到if-test。