首页 > 其他 > 详细

cin.clear()与cin.sync()的使用

时间:2019-11-29 19:04:06      阅读:80      评论:0      收藏:0      [点我收藏+]

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<<"输入数字\n";
    cin>>a;
    cout<<"a = "<<a<<endl;    
    return 0;
}

 

结果图作为参考:

 

    技术分享图片

 

 

cin.clear()与cin.sync()的使用

原文:https://www.cnblogs.com/qzhc/p/11959245.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!