在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');
    }
}

结果:

用cin.sync()清空输入缓冲区是错误的

 

 死循环问题解决

 

相关文章:

  • 2022-12-23
  • 2021-12-19
  • 2022-12-23
  • 2021-11-02
  • 2021-07-09
  • 2021-06-20
  • 2021-07-24
  • 2021-08-10
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-07
  • 2022-02-18
  • 2022-12-23
  • 2022-01-14
相关资源
相似解决方案