清空输入缓冲区:
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;
}
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。