C++檔案順序讀取,最後一個字元被讀取兩遍的原因

來源:互聯網
上載者:User

今天遇到了一個關於檔案讀寫的問題,覺得很奇怪。

我將問題簡化了下,寫了個小程式,原始碼如下:

#include <iostream><br />#include <fstream><br />using namespace std;<br />#include <conio.h></p><p>int main()<br />{<br />ifstream fin; //建立一個讀檔案流<br />fin.open("1.txt"); //開啟檔案<br />char ch; //用來儲存所讀取的字元</p><p>//順序讀取檔案的每個字元,並輸出到控制台<br />while ( !fin.eof())<br />{<br />fin.get(ch);<br />cout<<ch; //在控制台輸出讀取的內容。為什麼最後一個字元會出現兩次<br />}</p><p>//關閉檔案<br />fin.close();</p><p> //使控制台停止<br />cout<<"/n請按任意鍵退出……"<<endl;<br />getch();<br />return 0;<br />}

檔案“1.txt”裡的內容是:3x2+6x8#

運行程式,輸出的結果如下:

按我們一般的想法,應該最後只輸出一個#,可是輸出了兩個,這是為什麼呢?

我後來上網搜尋了一下,有這樣一個解釋,我覺得有點道理:

     事實上,檔案本身是沒有檔案結束符EOF的。當讀取檔案中最後一個有效字元後,雖然檔案指標已指向空白了,但這時還不知道是否到了檔案末尾,只有再讀取一次檔案,待讀不到任何內容了,這時輸入資料流設定eofbit位,eof的傳回值才為l,而空的內容是不會被提取到變數的,故最後一次讀到變數中的內容又被重複輸出了。

我再找找看看關於eof()函數的源檔案,看有沒有更好的解釋。

2011-03-18      16:47:33

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.