C++文件读取问题

1. 文件逐行读取

逐行读取,  行之间用回车换行符间隔

std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
    std::string oneLine = "";
    while(getline(fin, oneLine))
    {
        ......
    }
    fin.close();
}

2. 文件逐词读取

逐词读取, 词之间用空格间隔

std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
    std::string word = "";
    while(fin>>word)
    {
        ......
    }
    fin.close();
}

3. 文件结束标志

std::ifstream fin(fileName.c_str());
if(fin.is_open())
{
    std::string word = "";
    while(fin.peek() != EOF)
    {
        fin>>word;
        ......
    }
    fin.close();
}

上面的代码处理方法会出现一个问题:文件的最后一个词会被处理两遍,因为peek()返回当前文件指针下一个位置的字符,而指针位置不变。当while循环体中,文件指针指向最后一个字符,则需要再下一个循环中才能触发EOF。

fin.eof()也会出现同样的问题, eof在读取完最后一个数据后,仍是false, 当再次试图读一个数据时,由于发现没数据可读了才知道到文件末尾了,此时才修改标志,eof变为true。

解决方法:根据读取的字符进行判断进行判断文件的结束。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值