读书人

读文件返回不对了解决思路

发布时间: 2012-03-21 13:33:15 作者: rapoo

读文件返回,不对了
#include <iostream>
#include <fstream>
#include <sstream>
#include <algorithm>
#include <string>
#include <vector>
#include <cassert>
//#define N 10
using namespace std ;

typedef vector<int> VI ;
typedef vector<VI> VVI ;

void print(const VI& result) ;

int input(VVI& data)
{
ifstream in("xswby.txt") ;

if(!in)
{
cout<<"input error filename"<<endl ;
return 0;
}

int len = 0 ;

//int m ;

for(string s ; getline(in,s) ;len++ ) ;

in.seekg(0,ios::beg);

//in>>m;
//cout<<m ;

if(in.eof())
{
cout<<"读文件结束"<<endl ;

}

int tmp ;
int i = 0 ;

data.resize(len) ; //分配heap

for(string s ; getline(in,s) ;i++ )
{
for(istringstream sin(s) ; sin>>tmp ; )
{
data[i].push_back(tmp) ;
}

//i++ ;
}

cout<<"输入"<<endl ;

for(int k = 0 ; k < i ; k++)
print(data[k]) ;

return (i-1) ;
}

void print(const VI& result )
{
for(unsigned int i = 0 ; i < result.size() ; i++)
{
cout<< result[i] << " " ;
}

cout<<endl ;
}

int main()
{
VVI data ;
int len = 0;

len = input(data) ;


return 0 ;

}


想法是:先计算矩阵的行数,在申请heap,节约空间
现在的问题是我想先len++;到文件结束,后返回文件开始,再次的读文件
不过实现错了。求教

[解决办法]
修改如下所示:清除状态即可成功!

C/C++ code
#include "stdafx.h" #include <iostream>#include <fstream> #include <string>using namespace std; int  main( void){     ifstream in("d:\\1.txt") ;        if(!in)    {        cout<<"input error filename"<<endl ;        return 0;    }        int len = 0 ;        int m ;        for(string s ; getline(in,s) ;len++ ){                                            }            cout<<in.tellg(); // 输出-1可知出错了         in.clear();  // 清除 flag stage    in.seekg(0,ios::beg);   // 可正常执行了!                if(in.eof())    {        cout<<"读文件结束"<<endl ;            }        return 0; } 

读书人网 >C++

热点推荐