c++文件读取最后一个数据被读取两遍问题

在C++中,使用while循环读取文件至EOF时,由于EOF标志在读取最后一个字符后才设置,可能导致最后一个数据被读取两次。为避免此问题,对于字符类型数据,可以改用while(in.peek()==EOF);对于非字符类型,应使用intele;while(in>>ele)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果采用以下形式就会存在文件读取最后一个数据被读取两遍问题:

while(1)
{
    ...
    if(in.eof())
    {
        break;
    }
}

原因:eof()返回true时是读到文件结束符0xFF,而文件结束符是最后一个字符的下一个字符。因此,当读到最后一个字符时,程序会多读一次(编译器会让指针停留在最后一个字符那里,然后重复读取一次,这也就是就上面最后一个字符会输出两次的原因。

应改为:

如果读入的是字符类型,可以改为:

while(in.peek()==EOF)
{
    ...
}

如果·不是字符类型,则只能使用以下:

int ele;
while(in>>ele)
{
    ...
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值