int main()
{
/*cout<<"enter some integers :"<<endl;
istream_iterator<int> iiter(cin),eof;
*/
string filename1,filename2;
cout<<"enter the filename1 and filename2 :"<<endl;
cin>>filename1>>filename2;
cout<<"enter some integers :"<<endl;
istream_iterator<int> iiter(cin),eof;//这样是正确的,可以写到文件中,但是把这两句写到前面却不能写入了,为什么???
ofstream output1(filename1,ios::app);
ofstream output2(filename2,ios::app);
if(!output1||!output2)
{
cerr<<"can not open output file!"<<endl;
return EXIT_FAILURE;
}
ostream_iterator<int> ofiter1(output1," ");
ostream_iterator<int> ofiter2(output2,"\n");
while(iiter!=eof)
{
if(*iiter%2==0)
{
*ofiter1=*iiter;
++ofiter1;
}
else
{
*ofiter2=*iiter;
++ofiter2;
}
++iiter;
}
output1.close();
output2.close();
}
是不是要求输入流要在文件打开后才可以定义?
但是 cout iiter(cin),eof;这并没有用到文件啊??只是把这两句放到文件打开的前面却不能写入文件???为什么? 别的例子中用这迭代器直接初始化vector都行的。。请回复。。
追答流有很多种,标准输入也是合法的流,但是和文件无关
追问嗯,问题就在这。 上面的程序 把这两句标准输入放到前面却 写入txt文件不成功了。怎么解释这个问题??
追答我估计是在前面cin>>filename1>>filename2;时流内遗留了一些字符
如果你在前面定义cin,这些遗留字符不会被删除,而在后面定义则开始定义时刷新缓冲区删除了
这样在后面的循环种,这些遗留字符破坏了循环的条件,使得它进入异常状态
另外一个奇怪的事情是:你定义了一个叫eof的iterator,没有给它赋值,但是为什么后面直接和它比较?
哦 刚刚那位帮我解决了。eof空迭代器是用做结束迭代器。 谢谢你哈。