zoukankan      html  css  js  c++  java
  • 用cin.sync()清空输入缓冲区是错误的

    在vs中使用cin.sync()无法清空输入缓冲区

    两种比较好的方法:

    cin.ignore(numeric_limits<streamsize>::max(),'
    ')    //需要包含<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(), '
    ');
        }
    }

    结果:

     死循环问题解决

  • 相关阅读:
    P1280 尼克的任务
    P2286 [HNOI2004]宠物收养场
    筛法求素数
    拓扑排序
    观光旅游
    [USACO09OCT]热浪Heat Wave
    Java环境变量配置
    git 常用命令
    mysql-5.7安装、配置
    maven-java包管理工具-01
  • 原文地址:https://www.cnblogs.com/yifengs/p/15185675.html
Copyright © 2011-2022 走看看