[作业] 档案处理

楼主: 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