在做C++primer习题过程中,最近遇到一个问题,这个题目就是3.3,那就是输入缓冲区的清除问题,一开始没考虑到这方面的问题,后来运行时出现了点问题。经资料查找与学习,现总结如下:一、cin.clear()、cin.sync()
cin.clear()是用来更改cin的状态标示符的。
cin.sync()是用来清除缓存区的数据流的。
如果标示符没有改变那么即使清除了数据流也无法输入。所以两个要联合起来使用。例如:
#include
using namespace std;
int main()
{
int a;
cout<
cin>>a; //int型变量中放了char型数据,failbit置1
cout<
//cin.clear();
//cin.sync();
cout<
cin>>a; //故此处的输入无效
cout<
cin.clear(); //此处用cin.clear()流标志复位
//cin.sync();
cout<
cout<
//但刚才输入的字符并没有从流中清除,所以cin>>a又把那个字符放入a中,流输入流又不能正常工作
cin>>a;
cout<