C语言求助,fread,总是多输出一行数据

用fwrite往文件写入了一组结构体数据,然后用fread读出来是两行,如果我写入了两组数据,那么就是第一组正常输出,第二组输出了两次,什么鬼==这是输出到屏幕的代码wh... 用fwrite往文件写入了一组结构体数据,然后用fread读出来是两行,如果我写入了两组数据,那么就是第一组正常输出,第二组输出了两次,什么鬼= =

这是输出到屏幕的代码
while(!feof(fp))
{
fread(&data,N,1,fp);
printf("%s %s %s %s %s %s\n",data.unit,data.name,data.sex,data.project,data.value,data.date);
}
N是定义的结构体长度,是不是文件标记位置我搞错了?
这是输出到文件的代码
void add()
{
if((fp=fopen("data.dat","ab"))==NULL)
{
printf("数据丢失!!!\n");
exit(0);
}
struct customer data;
scanf("%s%s%s%s%s%s",data.unit,data.name,data.sex,data.project,data.value,data.date);
fwrite(&data,N,1,fp);
fclose(fp);
}
展开
 我来答
有你的晴天12138
2015-07-03 · TA获得超过1001个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:212万
展开全部

C 语言读文件是初学者最容易犯的一个错误,正确的方式是先读,再判断 feof, 正确的读文件方式如下:

while (1)
{
    fread(&data, N, 1, fp);
    if (feof(fp)
    {
        break;
    }
    
    printf(...);
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式