getline()的返回值问题
有这样一个题目:打开一个指定的文本,在每一行前加行号(如1.)。
我是这么编的。
#include<fstream>using namespace std;int main(){ char *s; fstream myFile("test.txt"); int i=0; s=new char[10]; while(myFile.getline(s,10,'\n')) myFile<<++i<<"."<<s<<endl; delete s; myFile.close();}int main(){ string s; vector<string> sv; sv.reserve(100); ifstream in("E:\\test.txt"); if(!in) return -1; while(getline(in,s)) sv.push_back(s); in.close(); ofstream out("E:\\test.txt"); if(!out) return -1; int i=1; vector<string>::const_iterator beg(sv.begin()),end(sv.end()); for(;beg!=end;++beg) { out<<i++<<": "<<*beg<<'\n'; }//////////////////////////////////////////////////////// system("PAUSE"); return 0;}
[解决办法]
用vector<string>暂存文件
#include <iostream>#include <string>#include <fstream>#include <vector>using namespace std;int main(){ fstream f("t.txt",ios::trunc | ios::out | ios::in); f<<"a\nb\nc\nd\ne\n"; vector<string> tf; string t; f.clear(); f.seekp(0,ios::beg); for(getline(f,t); !f.eof(); getline(f,t)) tf.push_back(t); f.clear(); f.seekp(0,ios::beg); for(int i = 1; i <= tf.size(); ++i) f<<i<<'.'<<tf[i - 1]<<endl; f.clear(); f.seekp(0,ios::beg); for(getline(f,t); !f.eof(); getline(f,t)) cout<<t<<'\n'; f.close();}
[解决办法]
#include "stdafx.h"
#include <fstream>
using namespace std;
int main()
{
fstream myFile( "e:\\test.txt", ios::in | ios::out );
char *s;
int i = 0;
s = new char[10];
while( myFile.getline(s,10,'\n') )
{
streamoff nCurrent = myFile.tellg();
int nPrev = nCurrent - strlen( s ) - 2;
myFile.seekg( nPrev );
myFile<< ++i << s;//<< endl;
myFile.seekg( nCurrent );
}
delete s;
myFile.close();
}
以上代码只是表示读和写是可以同时做的,但是要控制好seek的position
我去掉了endl和.这样才能保证串的大小不变。如果你调用myFile<< ++i << "."<< s << endl;
长度大的话,就会把后面的数据“bbbb” 给冲掉。
所以说同时读写是很难的。不如用临时文件或者写到vector里面
[解决办法]
输出到另一个文件中吧.
对同一个文件这样同时读写是不行的.