作者abchu ()
看板C_and_CPP
標題Re: [問題] C 的 eof 問題
時間Sun Jan 23 00:23:43 2011
※ 引述《danielpowter (daniel)》之銘言:
: 其實我爬過很多文章
: 也股狗過了
: 可是 我還是無法順利的處理問題
: 所以來請教各位前輩了
: 我的迴圈是以下
: while (fscanf (timefp, "%d", &Timedata)!=EOF)
: 其實在我撰寫之前我就有猜到會多讀取一次了
: 可是我現在一直想處理掉
: 看了很多可是不是跑無限迴圈
: 不然就是讀取不出來
: 請各位教導一下我了 謝謝
: ps. timefp 是ASCII檔案
: 拍謝 打太快 打錯了XD 以改正
我的意思的確是建議寫成
while (fscanf(timefp, "%d", &Timedata) == 1)
這樣可以保證你讀到一個數字的東西才會進入接下來的區塊
為什麼不寫成EOF,我這邊的看法是,我上網查了一下EOF對應到的數字正常好像是-1
那如果你的檔案裡面加上一些有的沒的非數字的東西,他會回傳0,而非EOF
你可以試試看~
如果檔案內容是:
-------
1
2
3
4
<EOF>
-------
這種情況兩支程式可能都會過
但如果檔案內容是:
-------
1
2
3
4
orz
5
<EOF>
-------
寫!=EOF經過我的測試會無窮迴圈,你可以用ftell把檔案位置印出來研究看看
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.49.166
推 yueayase:這好像是因為讀到orz,卻不是整數造成的後遺症,fscanf() 01/23 01:36
→ yueayase:會試圖去讀一個整數,但orz不是,所以就一直停在那裏,一直 01/23 01:37
→ yueayase:執行,原因好像是這樣吧? 01/23 01:37
推 firejox:EOF不見得是-1....就如同NULL不見得是0一樣 01/23 19:38