[作業] 檔案處理

作者: lacrimosacat (老貓)   2010-12-17 17:20:20
這問題困擾我蠻久了
while(!feof(in)){
fread(&guy,sizeof(struct entry),1,in)
printf("%d %s %s %s %s\n",guy.idx,guy.name,guy.name2,guy.from,guy.to);
fwrite(&guy,sizeof(struct entry),1,out);
}
為什麼這樣寫會讓最後一筆資料讀了兩次呢?
有沒有甚麼改進的方法?
作者: sa072686 (小紅)   2010-02-17 20:03:00
大概是最後一筆讀到剛好 下一次read才真正EOF在fread()後面加個if(feof(in)) break; 之類試試應該不是讀兩次 而是下一次沒讀到東西 既有資料維持原樣
作者: ianlini (小林)   2010-02-17 22:43:00
我這樣寫好像沒問題= =
作者: LPH66 (-6.2598534e+18f)   2010-02-18 02:46:00
#1BRdGNez (b98902HW)
作者: ianlini (小林)   2010-02-18 14:28:00
我在程式一開始就有執行跟這個一模一樣程式碼用來複製檔案可是不管在自己電腦還是批改娘 都是得到正確的結果耶= =我試過先fread一次再寫while(裡面read和write反過來)得到的結果一樣= =
作者: han960691 (han)   2010-02-19 23:43:00
有可能是你讀的測資原本的格式沒有設成你要讀取的格式EX:struct{ char a[24],int b}這有24bit但你給的測資沒有依照每24bit一格的格式所以才會在結尾有多東西我不是很確定啦~XD
作者: LPH66 (-6.2598534e+18f)   2010-02-20 00:27:00
學弟們有先看過我推的這篇文章嗎?
作者: MrGreat (阿臻)   2010-02-20 07:29:00
我也曾經出現過這種情況,可能的原因是讀完最後一筆entry還沒讀到EOF,可能還有換行、空白之類的,下次fread時才EOF,所以會寫入既有的(最後一筆資料),造成重覆,大概吧
作者: lacrimosacat (老貓)   2010-02-20 08:59:00
謝謝大家的想法

Links booklink

Contact Us: admin [ a t ] ucptt.com