作者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