當前位置:編程學習大全網 - 編程語言 - 文件結束符EOF

文件結束符EOF

哦,這個不是1樓說的那個樣子的。eof是文件結束的標誌,事實上是-1.可以稍微修改壹下樓主的程序來做證明:

while(!in.eof())

{

temp = in.get();

cout<<int(temp)<<endl;

count++;

}

這個時候,會發現在輸出count之前輸出的最後壹個是-1.

但是為什麽會輸出-1(也就是文件結束符號)呢?in.eof()返回的是in裏面的EOF變量,這個變量在in讀到文件的結束符時才會變為1。也就是說,只有當in.get()讀過了eof的時候,in中的EOF變量才會編程1,in.get()才能返回1。

那為什麽按照樓主給的代碼裏面的in>>temp寫法,最後會輸出兩個c,而和get的輸出不壹樣呢?這個是因為>>在處理的時候,如果碰到讀入的是文件結束符,是不會將其寫道緩存中的,那樣的話,緩存中的字符串還是在讀入eof之前的那個字符(這個代碼裏面也就是'c'),然後再賦值給temp的還是'c'了。

那如何可以比較完美的修改上面的代碼呢?對於文件輸入流來說,有壹個指針指向的是當前讀的字符串的下壹位,每讀壹位,指針就往下移壹位。就比如壹個只有abc的input.txt的文件,我們現在讀完了c,那麽指針的狀態是大致是下面這個樣子:

a

b

c

EOF <--

註意,這個時候,in.eof()還不返回1,因為in這個輸入流還沒有讀EOF這個文件結束符,但是in有壹個函數peek()是讀當前指針指向的這個位置的符號的。那麽如果用in.peek() == EOF 來最為判斷的標準就比較好了。樓主的例子寫成

while(in.peek() != EOF)

{

in>>temp;

cout<<temp<<endl;

count++;

}

就可以了。

順便說壹句,第壹段代碼裏面while的裏面再嵌壹個while沒有必要吧...

還有,無論讀還是寫,最好都要養成在操作完畢調用close()關閉流的好習慣:)

  • 上一篇:“改頭換面”的風行T5 EVO,殺馬特的造型,配三菱1.5T+192馬力
  • 下一篇:我要編程序,環境變量怎麽設置?
  • copyright 2024編程學習大全網