Re: [問題] C 的 eof 問題

看板C_and_CPP作者時間15年前 (2011/01/23 00:23), 編輯推噓2(202)
留言4則, 2人參與, 最新討論串3/3 (看更多)
※ 引述《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

01/23 01:36, , 1F
這好像是因為讀到orz,卻不是整數造成的後遺症,fscanf()
01/23 01:36, 1F

01/23 01:37, , 2F
會試圖去讀一個整數,但orz不是,所以就一直停在那裏,一直
01/23 01:37, 2F

01/23 01:37, , 3F
執行,原因好像是這樣吧?
01/23 01:37, 3F

01/23 19:38, , 4F
EOF不見得是-1....就如同NULL不見得是0一樣
01/23 19:38, 4F
文章代碼(AID): #1DEmII6N (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DEmII6N (C_and_CPP)