作者lacrimosacat (老貓)
看板b99902HW
標題[作業] 檔案處理
時間Fri Dec 17 17:20:20 2010
這問題困擾我蠻久了
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);
}
為什麼這樣寫會讓最後一筆資料讀了兩次呢?
有沒有甚麼改進的方法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.241.203
1F:→ sa072686:大概是最後一筆讀到剛好 下一次read才真正EOF 12/17 20:03
2F:→ sa072686:在fread()後面加個if(feof(in)) break; 之類試試 12/17 20:04
3F:→ sa072686:應該不是讀兩次 而是下一次沒讀到東西 既有資料維持原樣 12/17 20:05
4F:推 ianlini:我這樣寫好像沒問題= = 12/17 22:43
6F:推 ianlini:我在程式一開始就有執行跟這個一模一樣程式碼 12/18 14:28
7F:→ ianlini:用來複製檔案 12/18 14:28
8F:→ ianlini:可是不管在自己電腦還是批改娘 都是得到正確的結果耶= = 12/18 14:29
9F:推 ianlini:我試過先fread一次再寫while(裡面read和write反過來) 12/18 14:56
10F:→ ianlini:得到的結果一樣= = 12/18 14:57
11F:推 han960691:有可能是你讀的測資原本的格式沒有設成你要讀取的格式 12/19 23:43
12F:→ han960691:EX:struct{ char a[24],int b}這有24bit但你給的測資 12/19 23:44
13F:→ han960691:沒有依照每24bit一格的格式所以才會在結尾有多東西 12/19 23:45
14F:→ han960691:我不是很確定啦~XD 12/19 23:45
15F:推 LPH66:學弟們有先看過我推的這篇文章嗎? 12/20 00:27
16F:推 MrGreat:我也曾經出現過這種情況,可能的原因是讀完最後一筆entry 12/20 07:29
17F:→ MrGreat:還沒讀到EOF,可能還有換行、空白之類的,下次fread時才EO 12/20 07:30
18F:→ MrGreat:F,所以會寫入既有的(最後一筆資料),造成重覆,大概吧 12/20 07:33
19F:→ lacrimosacat:謝謝大家的想法 12/20 08:59