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. spring AOP的相关术语

    连接点:Joinpoint   其实业务层接口的方法 切入点:Pointcut 被增强的是切入点,没被增强是永远都是连接点.连接点不一定是切入点,切入点一定是连接点 通知:Advice 就是指要增强的 ...

  2. CSS模块化:less

    less的安装与基本使用 less的语法及特性 一.本地使用less的方法 Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言.是一种动态样式语言,属于c ...

  3. 自定义事件 Event 、CustomEvent的使用

    通过Event和dispathEvents触发自定义事件 <span id="btn">获取</span> <script> var event ...

  4. JAVA语言程序设计课后习题----第一单元解析(仅供参考)

    1 本题是水题,基本的输出语句 public class test { public static void main(String[] args) { // 相邻的两个 "" 要 ...

  5. 使用TextView和Textedit

    1.TextView  res/layout 中设置布局文件 hint属性:提示输入信息text属性:与hint的区别---hint仅仅是提示:text是实际的内容讲布局xml文件引入到activit ...

  6. Django :执行 python manage.py makemigrations 时报错 TypeError: __init__() missing 1 required positional argument: 'on_delete'

    原因 执行命令 python manage.py makemigrations 报错 TypeError: __init__() missing 1 required positional argum ...

  7. 解决Windows jmeter Non HTTP response message: Address already in use: connect 错误(转载)

    jMeter报错: Response code: Non HTTP response code: java.net.BindExceptionResponse message: Non HTTP re ...

  8. (十)zabbix监控TCP状态

    1)agent端配置 agent端脚本获取监控项 #vim /etc/zabbix/zabbix_agentd.d/tcp_status.sh #bin/bash [ $# -ne 1 ] & ...

  9. Python numpy.ZIP 安装问题

    今天在python上安装numpy,按照网上教程,安装pip,然后命令行直接:pip install numpy  .但是一直因为资源问题下载失败. 后来下载了一个numpy-1.11.2.zip 安 ...

  10. 201871010105-曹玉中《面向对象程序设计(java)》第十七周学习总结

    201871010105-曹玉中<面向对象程序设计(java)>第十七周学习总结 项目 内容 这个作业属于哪个过程 https://www.cnblogs.com/nwnu-daizh/ ...