在vs中使用cin.sync()无法清空输入缓冲区
两种比较好的方法:
cin.ignore(numeric_limits<streamsize>::max(),'\n') //需要包含<limits>
或者
cin.ignore(cin.rdbuf()->in_avail())
实例:
void test07() { int num; cout << "请输入0-10的数字" << endl; while (true) { cin >> num; //获取输入的数字 if (num > 0 && num <= 10) { cout << "您输入的数字是:" << num << endl; break; } //cout << "请重新输入" << endl; //如果输入的是数字 那么程序运行正常,如果输入的是不是数字类型 那么就会无限循环这句话 //原因是因为标志位 如果cin>>num 数据类型错误 那么标志位会变成1 cin.clear(); //重置标志位 //cin.sync(); //清空缓冲区 cout << "标志位:" << cin.fail() << endl; //0 正常 1 错误 cin.ignore(numeric_limits<streamsize>::max(), '\n'); } }
结果:
死循环问题解决