读书人

再问c++文件读写的有关问题

发布时间: 2012-03-02 14:40:28 作者: rapoo

再问c++文件读写的问题
第一次来,还没熟悉csdn的发帖规矩,问题没问完就结贴了,重新问,代码如下:
#include <iostream>
#include <fstream>
#include <vector>
#include <iomanip>
using namespace std;

int main()
{
ifstream fin( "1 ");
vector < pair <double, double> > t_s;
pair <double,double> tmp;

while(!fin.eof())
{
fin> > tmp.first> > tmp.second;
t_s.push_back(tmp);
}
fin.close();

ofstream fout( "t_s ");
vector < pair <double, double> > ::iterator iter;
for(iter=t_s.begin(); iter!=t_s.end(); ++iter)
fout < <setiosflags(ios::left) < <iter-> first < < '\t ' < <iter-> second < <endl;
fout.close();
}
测试用文件1的内容是:
1.111 2.222
2.222 3.333
输出文件的内容是:
1.111 2.222
2.222 3.333
2.222 3.333
-------------
回贴说使用
while(fin> > tmp.first> > tmp.second)
{
t_s.push_back(tmp);
}
可以解决问题,但为什么会是这样?

[解决办法]
因为你的文件在3.333后面还有空格或者回车,读完后不会置eof状态的,所以你就多读了一次。
但这多读的一次是不成功的,因为后面确实没有数了,于是会置eof和fail状态。
而C++又说,不成功的读不会修改你目标变量里的内容。

读书人网 >C++

热点推荐