读文件返回,不对了
#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; }