看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《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)
danielpowter:所以我會錯意思了 因為指標跟讀取到的 是兩樣東西 01/22 21:21
danielpowter:謝謝你 那另一種寫法呢 !FEOF(fp) 這個不會出錯嗎? 01/22 21:22
firejox:feof是在讀錯有設置旗標後才會成功 01/22 21:29
firejox:所以會造成多讀之類的問題 01/22 21:30
danielpowter:不好意思 那處理的方式是?? 01/22 21:30
firejox:就 while( fscanf(...) != EOF ) 就好了 01/22 21:34
firejox:不要再讀一次 01/22 21:35
firejox:除非你想在用getc 與 ungetc去確保他 01/22 21:36
danielpowter:不好意思啦 單純想多了解一點 所以問的比較多一點 01/22 21:42
firejox:本身feof就不太好用 01/22 21:47
firejox:而且如果是fscanf的話可以 01/22 21:50
firejox:while(fscanf(...)){ if(!feof(fp))break; ... } 試試看 01/22 21:50
firejox:因為我並不常用 01/22 21:51
※ 編輯: firejox 來自: 123.240.128.241 (01/23 19:36)
xatier:推學弟認真:) 01/28 17:02