[問題] 文字檔讀值會讀兩次

作者: jacky1989   2014-10-23 02:52:31
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VC2010
問題(Question):
使用檔案指標來讀取一個文字檔,最後一行為換行符號,會讀兩次
程式碼(Code):(請善用置底文網頁, 記得排版)
#include<stdlib.h>
#include<stdio.h>
int main(){
FILE *fp;
double value_tmp;
fp=fopen("C:\\source_data.txt","r");
if(!fp)
exit(0)
while(!feof(fp)){
fscanf(fp,"%lf",&value_tmp); //<-這邊有問題
printf("%lf",value_tmp);
}
return 0;
}
假設我原本的文字檔內是這樣
1.5
2.6
3.6
1.8
2.7
(end of file)
因為設計的關係,所以最後一個值會再空一行
那讀值出來就會變成這樣
1.5
2.6
3.6
1.8
2.7
2.7 <-會多出現一次
我該如何解決這個問題?總不能每次都去修改文字檔,把最後一個換行符號弄掉吧?
先謝謝了
作者: LPH66 (-6.2598534e+18f)   2014-10-23 02:55:00
不要在讀取前檢查 feof, 因為 feof 是在讀取失敗"後"才成立簡單講就是「還沒看當然不知道後面還有沒有」另外這跟檔尾的換行沒有關係
作者: johnpage (johnpage)   2014-10-23 07:52:00
讀取後馬上判斷
作者: foolstyle (阿牛)   2014-10-23 13:51:00
想借這篇請問一下@@C++是否有辦法可以一次取得檔案內所有內容(含有空白)呢
作者: johnpage (johnpage)   2014-10-23 14:02:00
記憶體會吃很多,應該不會這樣設計
作者: Feis (永遠睡不著 @@)   2014-10-23 18:24:00
作者: EdisonX (卡卡獸)   2014-10-23 19:12:00
讀取所有內容可直接用fread,但通常會設一個上限,如8mb,做分段讀取。若分段的話有時難處理。

Links booklink

Contact Us: admin [ a t ] ucptt.com