Re: [問題] C 的 eof 問題

看板C_and_CPP作者 (Tangent)時間15年前 (2011/01/22 21:19), 編輯推噓4(4010)
留言14則, 3人參與, 最新討論串2/3 (看更多)
※ 引述《danielpowter (daniel)》之銘言: : 其實我爬過很多文章 : 也股狗過了 : 可是 我還是無法順利的處理問題 : 所以來請教各位前輩了 : 我的迴圈是以下 : while (fscanf (timefp, "%d", &Timedata)!=EOF) : 其實在我撰寫之前我就有猜到會多讀取一次了 : 可是我現在一直想處理掉 : 看了很多可是不是跑無限迴圈 : 不然就是讀取不出來 : 請各位教導一下我了 謝謝 : ps. timefp 是ASCII檔案 : 拍謝 打太快 打錯了XD 以改正 假設檔案指標是 fp ↓ █ █ █...█ █ █ █ EOF fscanf的情況是 read --> return 1 ↓ █ █ █...█ █ █ █ EOF 然後檔案指標↓ fp ↓ █ █ █...█ █ █ █ EOF fscanf再讀 則變成 error read ----> return EOF ↓ █ █ █...█ █ █ █ EOF 除非在檔案之中有不必要的物件 例如空白之類的則需另外處理 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.240.128.241 ※ 編輯: firejox 來自: 123.240.128.241 (01/22 21:22)

01/22 21:21, , 1F
所以我會錯意思了 因為指標跟讀取到的 是兩樣東西
01/22 21:21, 1F

01/22 21:22, , 2F
謝謝你 那另一種寫法呢 !FEOF(fp) 這個不會出錯嗎?
01/22 21:22, 2F

01/22 21:29, , 3F
feof是在讀錯有設置旗標後才會成功
01/22 21:29, 3F

01/22 21:30, , 4F
所以會造成多讀之類的問題
01/22 21:30, 4F

01/22 21:30, , 5F
不好意思 那處理的方式是??
01/22 21:30, 5F

01/22 21:34, , 6F
就 while( fscanf(...) != EOF ) 就好了
01/22 21:34, 6F

01/22 21:35, , 7F
不要再讀一次
01/22 21:35, 7F

01/22 21:36, , 8F
除非你想在用getc 與 ungetc去確保他
01/22 21:36, 8F

01/22 21:42, , 9F
不好意思啦 單純想多了解一點 所以問的比較多一點
01/22 21:42, 9F

01/22 21:47, , 10F
本身feof就不太好用
01/22 21:47, 10F

01/22 21:50, , 11F
而且如果是fscanf的話可以
01/22 21:50, 11F

01/22 21:50, , 12F
while(fscanf(...)){ if(!feof(fp))break; ... } 試試看
01/22 21:50, 12F

01/22 21:51, , 13F
因為我並不常用
01/22 21:51, 13F
※ 編輯: firejox 來自: 123.240.128.241 (01/23 19:36)

01/28 17:02, , 14F
推學弟認真:)
01/28 17:02, 14F
文章代碼(AID): #1DEjbRVi (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DEjbRVi (C_and_CPP)