cin.clear()与cin.sync()是有顺序的
2014-05-26 23:09
381 查看
关于网上看到cin.clear()与cin.sync()是没有顺序的,但通过实践,发现cin.clear()与cin.sync()是有顺序的。
先说说他们分别的作用吧,如下:
在输入错误的情况下,先执行清空流,会发生下面的情况:
在流中fail()状态值无效的情况下,执行cin.sync(); 清空流是无效的,输入流中的数据依旧在(从错误开始那个,包括错误那个字符仍然在流中)。
为此特意写了一段代码分析,如下:
运行情况如下图:
先说说他们分别的作用吧,如下:
cin.clear(); // 将流中的所有状态值都重设为有效值 cin.sync(); //清空流
在输入错误的情况下,先执行清空流,会发生下面的情况:
在流中fail()状态值无效的情况下,执行cin.sync(); 清空流是无效的,输入流中的数据依旧在(从错误开始那个,包括错误那个字符仍然在流中)。
为此特意写了一段代码分析,如下:
#include <iostream> using namespace std; int main() { int a; char c; cout<<"输入字母:"<<endl; //输入ab4de试试 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; //由于上面清空流无效,‘abcde’还在输入流中,这是读取'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; }
运行情况如下图:
相关文章推荐
- C++中cin对象的clear方法和sync方法的暧昧关系
- cin 详解(get()、getline()、clear()、sync())
- cin.clear,cin.sync,cin.ignore
- cin.clear()与cin.sync()
- cin流输入控制(clear(),sync(),flush(),ignore())
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin学习--------cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
- cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())
- IO:cin.clear() 和 cin.sync() 的区别
- cin.clear cin.sync 等函数用法
- 输入输出流的细节(cin.clear,cin.sync(),cout的一些细节处理)
- 缓冲区及流状态、cin.sync()、cin.clear()、cin.ignore()
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin详解(cin.get()、cin.getline()、cin.clear()、cin.sync())
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin用法介绍(特别是学习了cin.clear和cin.sync)
- 【C++】cin.clear()、cin.sync()和cin.ignor()的用法
- cin.clear()与cin.sync()与cin.ignore()
- cin.get,cin.clear以及cin.sync
- in.clear()、cin.sync()和cin.ignor()的用法