c++中对文件的io流和io迭代器是不是有什么定义顺序要求?请看下面的小程序

intmain(){/*cout<<"entersomeintegers:"<<endl;istream_iterator<int>iiter(cin),eof;*/st... 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();
}
是不是要求输入流要在文件打开后才可以定义?
展开
 我来答
reverse_walker
2012-07-22 · TA获得超过590个赞
知道小有建树答主
回答量:377
采纳率:0%
帮助的人:464万
展开全部
我调试了下
istream_iterator<int> iiter(cin)解开等于

istream_iterator(istream_type& _Istr)
: _Myistr(&_Istr)
{ // construct with input stream
_Getval();
}

_GetVal()解开等于
void _Getval()
{ // get a _Ty value if possible
if (_Myistr != 0 && !(*_Myistr >> _Myval))
_Myistr = 0;
}

看得出,初始化流迭代器,流构造函数会读取流的第一个元素.存放在_Myval里
也就是一创建这个迭代器,就需要读取一个元素<int>,而你要求首选是输入文件名.

当你调用*iter,流迭代器会返回const 类型的 _Myval引用.
当你调用iter++,迭代器会从cin中读取下一个元素到_Myval.
----------------------------------输入缓冲区----------------------------
istream_iterator<int> iiter(cin)放在前面

filename1.txt filename2.txt 1 2 3 4 5 6 7 8

istream_iterator<int> iiter(cin)放在后面

filename1.txt filename2.txt 1 2 3 4 5 6 7 8

能问下楼主看得什么书吗?感觉不错.我也想去看下.
arongustc
科技发烧友

2012-07-22 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:2.3万
采纳率:66%
帮助的人:5966万
展开全部
流迭代器需要一个流,文件没有打开前,还不是合法的流,因此要求先打开是比较合理的
更多追问追答
追问
但是 cout iiter(cin),eof;这并没有用到文件啊??只是把这两句放到文件打开的前面却不能写入文件???为什么?    别的例子中用这迭代器直接初始化vector都行的。。请回复。。
追答
流有很多种,标准输入也是合法的流,但是和文件无关
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zcg0327
2012-07-22
知道答主
回答量:43
采纳率:0%
帮助的人:20万
展开全部
不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式