zoukankan      html  css  js  c++  java
  • cin.clear()与cin.sync()的使用

    cin.clear()与cin.sync()使用是有先后顺序的。

    他们的作用:

      cin.clear(); //将流中的所有状态都重设为有效值

      cin.sync();//清空流

    在输入错误的情况下,如果先执行cin.sync() (清空流) ,会发生下面的情况:

    在流中fail()结果为1( 状态值无效) 的情况下,执行cin.sync(); 清空流是无效的,输入流中的数据依旧在(从错误开始那个,包括错误那个字符仍然在流中)。

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int a;
        char c;
        cout<<"输入字母:"<<endl;  //输入ab4试试 
        cin>>a;    //由于输入的是字母,会出错
        cout<<"cin.fail() = "<<cin.fail()<<endl; //因为输入出错,会输出1. 
        cout<<"a = "<<a<<endl;  //没有输入成功,因此a是随机值 
        cin.sync();    //在流中fail()状态值无效的情况下,执行cin.sync(); 清空流是无效的 
        cout<<"cin.fail() = "<<cin.fail()<<endl; //流中fail标志位仍然是1. 
        cin>>a;        //还是会读取'a',仍然出错 
        cout<<"cin.fail() = "<<cin.fail()<<endl; //因为输入出错,会输出1. 
        cout<<"a = "<<a<<endl;  //输出和上面相同的随机值。 
        cin.sync();    //在流中fail()状态值为1的情况下,执行cin.sync(); 清空流是无效的
        
        cin.clear();   //将流中的所有状态值都重设为有效值 
        cin>>c;        //由于上面清空流无效,‘ab4’还在输入流中,这是读取'a' 
        cout<<"c = "<<c<<endl;
        cin>>c;       //读取'b' 
        cout<<"c = "<<c<<endl;
        cin>>a;       //读取'4' 
        cout<<"a = "<<a<<endl;
        cout<<"cin.fail() = "<<cin.fail()<<endl; //输入成功,错误标志位为0 
        
        cin.sync();  //这时流中fail()状态值为0,输入流被成功清空 
        cout<<"输入数字
    ";
        cin>>a;
        cout<<"a = "<<a<<endl;    
        return 0;
    }

    结果图作为参考:

        

  • 相关阅读:
    NYOJ--1058--dfs--部分和问题
    js中数组的操作方法
    eval()函数
    ES6 对象新增方法 object.is() object.assign()
    vue 中的nextTick
    vue vue-cli创建项目步骤方法
    node express创建项目步骤
    get post put delete
    vue中的状态管理 vuex store
    vue的实例属性$options
  • 原文地址:https://www.cnblogs.com/qzhc/p/11959245.html
Copyright © 2011-2022 走看看