标志位与清空缓冲区--???

让用户输入指定范围内的数字,如果不正确 重新输入

  • cin.fail() 看标志位  0正常 1不正常
  • cin.clear()重置标志位
  • cin.syne() 清空缓冲区  解决不了死循环问题
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
    }

}

结果:

查看标志位

 结果:

 

 解决办法:重置标志位

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 错误
    }
}

结果:

 问题没解决 还是死循环???

原文地址:https://www.cnblogs.com/yifengs/p/15185504.html