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 ;
}

结果图作为参考:

    

cin.clear()与cin.sync()的使用的更多相关文章

  1. cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())

    在C中,输入输出用scanf和printf,在输入数据的同时还需说明数据的类型,如果输入数据较多,那就很麻烦,而C++中也有相似的东西cin和cout,它们来自C++的一个名叫" iostr ...

  2. cin.clear()、cin.sync()

    看机器学习时,发现之前学的C++代码忘了,cin.clear().cin.sync() cin.clear():将流中的所有状态值都重设为有效值 cin.sync():清空流 这个很有意思,如果没有c ...

  3. cin.get();cin.clear();cin.sync()

    先看代码: #include<iostream> using namespace std; int main(){ int c,x; cout<<"输入大小" ...

  4. C++中cin.clear()的用法

    我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin里面的数据流,而实际上却与此相差很远,首先我们看看以下代码: #include <iostream>  usin ...

  5. C++中cin.get(),cin.getline(),cin>>,gets(),cin.clear()使用总结

    1.cin.get()  实质:类istream所定义对象cin的重载成员函数 用于读取单字符  istream& get(char&)    int get(void) 用于读取字符 ...

  6. c++中 cin、cin.get()、cin.getline()、cin.getchar()的区别

    ①cin>>:无法接收空格.Tap键且以空格.Tap键.回车符为分隔符: ②cin.get( ):可以接收空格.Tap键且以回车符为结束符: 一:可输入单个字符 格式: char ch; ...

  7. STL中流相关的输入输出符和get函数彻底总结:cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    我的总结: [首先:对于流来说,就把流看成一个中转的仓库,对流进行<<运算或>>运算或者get函数的运算都是指,把“流”中的数据“运送”到“内存变量”中去,还是把内存变量中的数 ...

  8. [原创]cin、cin.get()、cin.getline()、getline()、gets()、getchar()的区别

    这几个输入函数经常搞不清具体特点和用法,这里稍作总结 一.cin>> 1.最基本用法,输入一个变量值 2.输入字符串,遇“空格”.“TAB”.“回车”结束,比如输入“hello world ...

  9. C++中关于cin、cin.get()、cin.getline()、getline()、gets()等函数的用法

    1.cin>> 用法1:最基本,也是最常用的用法,输入一个数字: 注意:>> 是会过滤掉不可见的字符(如 空格 回车,TAB 等) cin>>noskipws> ...

随机推荐

  1. java实现spark常用算子之Union

    import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...

  2. 最全MySQL面试题和答案

    Mysql 的存储引擎,myisam和innodb的区别. 答: 1.MyISAM 是非事务的存储引擎,适合用于频繁查询的应用.表锁,不会出现死锁,适合小数据,小并发. 2.innodb是支持事务的存 ...

  3. 【科创人上海行】Tinyfool郝培强 :始于不惑的微服务式创业,背负身心病痛贴地飞行

    Intro 科创人,分享技术创业者的成长与创业经验. 何谓创业?勇于面对未知.肩负重任的人生抉择. 何谓经验?沟沟坎坎.有笑有泪,各有其宝贵. 科创人的价值支点是"人",我们不以市 ...

  4. springboot2.0集成webSocket

    WebSocket和http的区别? http协议是用在应用层的协议,他是基于tcp协议的,http协议建立链接也必须要有三次握手才能发送信息. http链接分为短链接,长链接,短链接是每次请求都要三 ...

  5. ORM简单增删改查

    namespace ORM { class Program { static void Main(string[] args) { //AddPetStore();//添加 UpdatePetStor ...

  6. Redis的keyspace notification(键空间通知)

    文章来源https://www.cnblogs.com/tinywan/p/5903988.html 一.需求分析: 设置了生存时间的Key,在过期时能不能有所提示? 如果能对过期Key有个监听,如何 ...

  7. DA_06_高级文本处理命令

    Linux中没有盘符这个概念,只有一个根目录“/”,所有文件都在它下面:点击计算机,下面存放的都是根目录下的东西: 2.6 文本文件编辑命令 1.cat 命令用于查看纯文本文件(内容较少的:一次性全部 ...

  8. CSS属性(pading margin)

    margin: margin:5px auto;意思上下为5,左右平均居中 margin-top: 20px; 上外边距                         margin-right: 3 ...

  9. dubbo框架-学习-dubbo原理

    博客:Dubbo原理和源码解析之服务暴露 博客:dubbo实现原理简单介绍

  10. iOS View的一些操作定义为宏

    #define ViewOf(__View__,__TAG__) [__View__ viewWithTag:__TAG__]#define LabelOf(__View__,__TAG__) ((U ...