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

看板C_and_CPP作者 (幻想的夢境)時間9年前 (2014/10/23 02:52), 9年前編輯推噓4(406)
留言10則, 5人參與, 最新討論串1/1
開發平台(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 <-會多出現一次 我該如何解決這個問題?總不能每次都去修改文字檔,把最後一個換行符號弄掉吧? 先謝謝了 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.233.78.140 ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414003960.A.678.html

10/23 02:55, , 1F
不要在讀取前檢查 feof, 因為 feof 是在讀取失敗"後"才成立
10/23 02:55, 1F

10/23 02:56, , 2F
簡單講就是「還沒看當然不知道後面還有沒有」
10/23 02:56, 2F

10/23 02:56, , 3F
另外這跟檔尾的換行沒有關係
10/23 02:56, 3F
但是就算我改成 do{ ...... }while(!feof(fp)); 一樣是會多讀一次耶 ※ 編輯: jacky1989 (118.233.78.140), 10/23/2014 02:58:08

10/23 07:52, , 4F
讀取後馬上判斷
10/23 07:52, 4F

10/23 13:51, , 5F
想借這篇請問一下@@
10/23 13:51, 5F

10/23 13:52, , 6F
C++是否有辦法可以一次取得檔案內所有內容(含有空白)呢
10/23 13:52, 6F

10/23 14:02, , 7F
記憶體會吃很多,應該不會這樣設計
10/23 14:02, 7F

10/23 18:24, , 8F
10/23 18:24, 8F

10/23 19:12, , 9F
讀取所有內容可直接用fread,但通常會設一個上限,如8mb
10/23 19:12, 9F

10/23 19:13, , 10F
,做分段讀取。若分段的話有時難處理。
10/23 19:13, 10F
文章代碼(AID): #1KH_puPu (C_and_CPP)