首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于用eof()判断读入的文件时候是否到结尾的有关问题

2012-02-15 
关于用eof()判断读入的文件时候是否到结尾的问题有一个问题如下:#includeiostream#includefstream#inc

关于用eof()判断读入的文件时候是否到结尾的问题
有一个问题如下:
#include   <iostream>
#include   <fstream>
#include   <vector>
using   namespace   std;
int   main()
{
        vector <int>   intVec;
        int   num=0;
        ifstream   in( "zhy.txt ");
        if(!in)
        {
                return   -1;
        }

        while(   !in.eof()   )
        {
                in> > num;
                intVec.push_back(num);
        }

        for(vector <int> ::iterator   iter=intVec.begin();   iter!=intVec.end();   ++iter)
        {
                cout < <*iter < <endl;
        }
        return   0;
}

打开zhy.txt,txt中包含1行数据,为1   2
可是当我执行以上程序从文件中读取数据后输出的是1   2   2,请问这是为什么呢?
只有10分了,对不住大家

[解决办法]
while( !in.eof() )
{
in> > num;
intVec.push_back(num);
}

这应该是三次
你最后一次 in> > num
这时是eof
但是intVec.push_back(num);
由于上次是eof
所以这次 num仍然保留2 也就是再次pushback 2

之后再来判断in.eof

当然出错了 呵呵
[解决办法]
遇到换行符的时候 in> > num出错 num还是刚才那个2 于是又把一个2push进去了
[解决办法]
while( !in.eof() )
{
in> > num;

if (0 == in.fail())intVec.push_back(num);
}

[解决办法]
while( in> > num)
{
if (0 == in.fail())intVec.push_back(num);
}
[解决办法]
单一行,但最后面有空格也会出这个问题,,如果没有就不会有问题了
[解决办法]
错误是由于eof造成的
你读入在前,而判断在后
读错误,变量值仍然保留的是上次的值没有clear

再说下eof,它是在读入最后一个字符的下个字符才返回EOF

热点排行