关于c++ io标准输入输出流的问题~

#include<iostream>#include<map>#include<list>#include<string>usingnamespacestd;intmai... #include<iostream>
#include<map>
#include<list>
#include<string>
using namespace std;
int main()
{int i,a;<br>while(!cin.eof())<br>{cout<<"输入i:"<<endl;<br> cin>>i;cout<<"i输入完毕:"<<endl;<br> cout<<"输入a:"<<endl;<br> cin>>a;<br> cout<<"a输入完毕:"<<endl;<br>if(cin.bad()||cin.fail())<br>{fflush(stdin);cout<<"流状态已刷新^"<<endl;cin.clear();continue;}
}
cout<<i<<a<<endl;
}关于这个输入输出流的问题我是越弄越迷糊了,我在while条件里设置的条件是文件结束的时候结束while循环,如果是其他错误的时候就刷新输入流 (使用fflush(stdin)函数刷新输入流,不知道对不对) 然后重新输入,但是为什么,当我输入文件结束符的时候它也刷新缓冲区呢?晕了,谁能给我讲讲c++输入输出的工作原理~
展开
 我来答
匿名用户
2013-11-18
展开全部
你这个的问题就是cin.fail的问题。比如你设置的int a可是输入一个char型,cin.fail也会返回true的。你看下面的例子 int a;
cout<<"输入一个字母:"<<endl;
cin>>a; //int型变量中放了char型数据,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //输出1
cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
cin>>a; //故此处的输入无效
cout<<a<<endl; //输出不确定值
cin.clear(); //此处用cin.clear()流标志复位
cout<<"cin.fail()="<<cin.fail()<<endl; //此处failbit已为0
cout<<"输入一个数字:"<<endl;
//但刚才输入的字符并没有从流中清除,所以cin>>a又把那个字符放入a中,流输入流又不能正常工作
cin>>a;
cout<<a<<endl; //输出不确定值
cout<<"cin.fail()="<<cin.fail()<<endl; //在此处failbit又为1
cin.clear(); //再次修复输入流
cin.ignore(); //取走刚才流中的字符
cout<<"输入一个数字:"<<endl; //再次接收用记输入,这次输入数字,正常输出了
cin>>a;
cout<<"a="<<a<<endl;
//现在再看一下输入流的failbit
cout<<"cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-18
展开全部
cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常cin.fail()="<<cin.fail()<<endl;//输出0,表明输入流已恢复正常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-11-18
展开全部
eof也会致使流cin.fail()返回true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式