文件結尾的判斷


  前一段時間在使用 getline() 按行讀取整個文件時遇到了一個很奇怪的問題——文件的最后一行會被讀取多次。百思不得其解,后來上網查了很久才發現原來是用於檢測文件結尾的 eof() 的問題。eof() 報告最近讀取的結果,也就是說,它們在事后報告,而不是預先報告,因此應將eof() 測試放在讀取之后。

    eof() 數的功能是:判定是否已經讀到文件的結尾,如果到文件結尾,該函數返回值為1,否則返回為0。事實上,文件本身是沒有文件結束符EOF的。當讀取文件中最后一個有效字符后,雖然文件指針已指向空白了,但這時還不知道是否到了文件末尾,只有再讀取一次文件,待讀不到任何內容了,這時輸入流設置eofbit位,eof的返回值才為l,而空的內容是不會被提取到變量的,故最后一次讀到變量中的內容又被重復輸出了。
    所以解決這個問題的方法就是先讀取,然后判斷文件是否為空,如果不為空則輸出,即代碼如下:
1 ifstream fin(inputname);
2 ofstream fout(outputname);
3 string str;
4 fin>>str;
5 while(!fin.eof())
6 {
7    fout<<str<<endl;
8    fin>>str;
9 }

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM