c++中怎么清除输出缓冲区
2016-03-11 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
关注
展开全部
c++中使用cin.sync来清除缓存区的数据流的。如果标示符没有改变那么即使清除了数据流也无法输入。所以cin.clear()和cin.sync()要联合起来使用。
对于cin.clear()和cin.sync()参考以下程序:
#include<iostream>
using namespace std;
intmain()
{
int a;
cout<<"输入一个字母:"<<endl;
cin>>a; //int型变量中放了char型数据,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //输出1
//cin.clear();
//cin.sync();
cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
cin>>a; //故此处的输入无效
cout<<a<<endl; //输出不确定值
cin.clear(); //此处用cin.clear()流标志复位
//cin.sync();
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,表明输入流已恢复正常
return 0;
}
对于cin.clear()和cin.sync()参考以下程序:
#include<iostream>
using namespace std;
intmain()
{
int a;
cout<<"输入一个字母:"<<endl;
cin>>a; //int型变量中放了char型数据,failbit置1
cout<<"cin.fail()="<<cin.fail()<<endl; //输出1
//cin.clear();
//cin.sync();
cout<<"输入一个数字:"<<endl; //由于failbit值为1,输入流不能正常工作
cin>>a; //故此处的输入无效
cout<<a<<endl; //输出不确定值
cin.clear(); //此处用cin.clear()流标志复位
//cin.sync();
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,表明输入流已恢复正常
return 0;
}
展开全部
std::cout.rdbuf()->pubsetbuf(p, n);表示用p[0] .. p[n-1]来保存缓冲的字符,pubsetbuf(0,0)表示不缓冲。也有可能系统本身就不许没有缓冲。
std::cout.flush();把字符缓冲区清空,送到它该去的地方。
如果std::cout.sync_with_stdio(true);与C的标准输出输入共享一个缓冲区,则fflush(stdout)也可以清空C或C++的标准输出输入缓冲区。
如果想最保险的就调用std::cout.setf(std::ios_base::unitbuf);这样每次输出都直接送到字符该去的地方。
std::cout.flush();把字符缓冲区清空,送到它该去的地方。
如果std::cout.sync_with_stdio(true);与C的标准输出输入共享一个缓冲区,则fflush(stdout)也可以清空C或C++的标准输出输入缓冲区。
如果想最保险的就调用std::cout.setf(std::ios_base::unitbuf);这样每次输出都直接送到字符该去的地方。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询