打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
清空缓冲区
userphoto

2012.11.20

关注
清空输入缓冲区:
fflush(stdin);
std::cin.clear(); //清除错误标记
std::cin.sync(); //清空缓冲区

cin.clear() 只是更改cin的状态标示符,并没有清除缓冲区,而一般输入是以回车为结束(转化为换行符'\n'),所以cin.clear()并没有起作用。应该加上在cin.sync(); 或 fflush(stdin); 与cin.clear() 一起使用。
如果只调用cin.clear(),错误标记是被删除了,可以继续标准输入了。但是别忘了,上次输入的非数字字符(就是这个字符标记了end-of-stream)还在缓冲区里呆着呢,继续cin的话,会立即得到这个非数字字符,导致又一个end-of-stream,于是copy立即返回,结果什么也没得到。
如果只调用cin.sync(),缓冲区是被清空了,但是错误标记还在,依然没法继续输入。
所以cin.clear()和cin.sync()一个都不能少,但是顺序可以颠倒。

清空输出缓冲区:
fflush(stdout);
std::cout.clear();
std::cout.flush();
endl也有清空输出缓冲区的功能.

int main()
{
 int a;
 vector<int> ivec;
 
 while (cin>>a)
 {
        ivec.push_back(a);
 }
if (ivec.size()%2!=0)
 {
          //fflush(stdin);//用这个可以全部清空
          cin.clear();
          cin.sync();
          cout<<"please input the last number:";
          cin>>a;
           ivec.push_back(a);
 }
 
 for (vector<int>::size_type i =0; i!=ivec.size(); i+=2)
 {
          cout<<ivec[i] + ivec[ivec.size()-i-1]<<" ";
 }
 cout<<endl;
 
return 0;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
c语言中fflush(stdin)作用(转)
cin cout常用函数
cin读取失败怎么办?
c++标准IO库简介
scanf 和cin 的区别
C++ Primer第三章字符串,向量和数组习题
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服