读书人

文件读取有关问题

发布时间: 2012-03-14 12:01:12 作者: rapoo

求助,文件读取问题
我编了一个小程序,用来计算数据文件中的总行数。可是计算完行数后,再对变量赋值就不对了,不知何故。


#include <iostream>
#include <fstream>

using namespace std;

int main()
{
char filein[] = "f.txt ", buffer[100];
int nline; //文件中的行数
float data;

ifstream infile(filein, ios::in);
if(!infile){
cerr < < "open error! " < <endl;
abort();
}

/* 计算文件中的总行数 */
nline = 0;
do{
infile.getline(buffer,100);
nline++;
}while( infile.peek() != EOF );

/* 输出总行数以及第一行中数据 */
cout < < nline < < endl;
infile.seekg(0,ios::beg);
infile > > data;
cout < < data < < endl; //输出的结果不对

infile.close();

return 0;
}


[解决办法]
...
infile.clear();
infile.seekg(0,ios::beg);
...
[解决办法]
vc iostream上的bug,seek前记得clear
[解决办法]
这个怎么是bug呢?计算行数的时候已经读到文件末尾了,infile的流状态中的eof被置位,这个时候调用seekg根本就没有任何效果
[解决办法]
当你第一次遍历完文件时,已经到了文件流的结束.
如果你要重新操作此文件对象,则需要清除它此前的状态,然后再定位.

/* 输出总行数以及第一行中数据 */
cout < < nline < < endl;
infile.clear();
infile.seekg(0,ios::beg);
infile > > data;
cout < < data < < endl;



[解决办法]
只有到了结束,并且又读了一次才会置eof

读书人网 >C++

热点推荐