C++文件读取问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Rosa_zz/article/details/81779015

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。

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

猜你喜欢

转载自blog.csdn.net/Rosa_zz/article/details/81779015