读书人

关于用eof()判断读入的文件时候是否到

发布时间: 2012-02-15 12:09:44 作者: rapoo

关于用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

读书人网 >C++

热点推荐