C/C++使用变量访问输出文件内容,出现最后一条数据重复输出两次的原因解析,文件问题(2)

7 篇文章 1 订阅
3 篇文章 0 订阅

C/C++用变量访问输出文件,出现最后一条数据重复输出两次的原因解析

注:以下储存文件信息的变量,举例为已声明的结构体变量

在用C/C++编写代码的时候,我们通常会使用结构体来读写文件信息,在输出的过程中我们有可能出现,最后一条信息输出两次????

一般我们都是这么写的:

while(!feof(fp))
    {
    
        fread(&str,sizeof(yh),1,fp);//读出文件信息            
        printf("\t\t\t\t%-15s%-13s%15s%16d%15c%20s\n\n",str.zhanghao,s tr.mima,str.tel,str.BuySum,str.tol,str.time);  //输出信息

    }

    fclose(fp);
 

结果如图所示:
在这里插入图片描述

可见,最后一条信息多输出了一次,但是查看文件中,有、又确实只有一条消息,但其实问题不在文件上,而是在结构体变量和feof函数上,因此,我们可如此修改:

while(!feof(fp))
    {
        if(fread(&str,sizeof(yh),1,fp))
        printf("\t\t\t\t%-15s%-13s%15s%16d%15c%20s\n\n",str.zhanghao,str.mima,str.tel,str.BuySum,str.tol,str.time);
       
        else
            break;

    }

解决:在读出函数加个if判断

原因:feof函数是判断文件是否被访问到最后,但是这个最后其实指的是,读完最后一条信息的那个位置的后面是否还有值,也就是说,最后一条信息读完以后,指针自动后移,文件指针已经到达文件末尾,但是feof判断不出来,所以,他还要循环一次,执行fread,但是读取失败,可结构体变量里面还保存着上一次(最后一条)读出的信息,然后输出,再回到循环判断feof,这次他才返回1/true,表示文件末尾,退出循环。由此,最后一条信息输出了两次。

修改后的输出结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值