cin标准输入流错误处理
来源:互联网 发布:name.com 域名证书 编辑:程序博客网 时间:2024/04/30 13:32
cin.sync()函数
这个是用来清空 cin 缓冲区里面未读取的信息........
例子:
#include <iostream>using namespace std;int main(){char first, second;cout << "Please,enter a word:" << ends;first = cin.get();cin.sync();cout << "Please,enter another word:" << ends;second = cin.get();cout << "The first word began by " << first << endl;cout << "The second word began by " << second << endl;return 0;}
以下为扩展内容:cin.clear
#include <iostream>using namespace std;int main(){int a;cin >> a;cout << cin.rdstate() << endl;//s.rdstate() 返回s的当前条件状态,返回值类型为 strm::iostateif (cin.rdstate() == ios::goodbit){cout << "输入数据的类型正确,无错误!" << endl;}if (cin.rdstate() == ios_base::failbit){cout << "输入数据类型错误,非致命错误,可清楚输入缓冲区挽回!" << endl;}system("pause");}
我们定义要输入的变量类型是整型,但如果我们输入了英文字母或者汉字,就会发生错误,cin里面有个方法能检测这个错误,就是cin.rdstate():
当 cin.rdstate()返回0(即 ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或者操作。而cin.clear则可以控制我们此时cin里对这个问题的一个标识,语法如下:
cin.clear(标示符)
标示符号为:
goodbit 无错误
eofbit 已到达文件尾
failbit 非致命的输入\输出错误,可以挽回
badbit 致命的输入\输出错误,无法挽回
若在输入输出类里,需要加ios::标识符号
通过cin.clear,我们能确认它的内部标识符,如果输入错误则能重新输入,结合真正的清空数据流方法cin.sync(),请看下面的例子:
#include<iostream>using namespace std;int main(){int a;while (true){cin >> a;if (!cin) //条件可改写为cin.fail(){cout << "输入有误!请重新输入" << endl;cin.clear();cin.sync(); //清空流}else{cout << a;break;}}system("pause");}
上面的cin默认参数为0,即无错误,正常操作,当我们输入英文字母'k'时,它的状态标识改为fail(即1),即错误,用cout对用户输出信息,再用 cin.clear让错误标识改回0,让我们可以继续输入,再清空流数据继续输入。如果我们没有了cin.clear,则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为fail,当运行到条件判断时,便总是回到错误的条件表示里,并且我们再也没办法输入,因为错误的表示关闭了cin,所以会进入死循环------------------------------------------------------------------------------自己再添加一句:如果输入错误,则再也输入不进去,需用clear,而sysn用于清除当前输入缓冲区中的内容。
#include<iostream>using namespace std;int main(){int a;cin >> a;cout << a << endl;cin >> a;cout << a << endl;cin.clear();cin.sync();cin >> a;cout << a << endl;return 0;}
#include <iostream> using namespace std; int main() { int a,b; cin>>a; cin>>b; return 0; }
cin.sync(); // 这个函数是用来清空缓冲区的 cin.clear();的错误是清楚错误标志例如一下程序
假如,运行都cin>>a时要求输入,这是输入的是一个字符。这样,和a的类型不符合,cin的状态就标志为错误,因为cin的状态为错误,以后的cin>>都不会被执行。可能你有疑问,“是不是在cin>>b前加个cin.clear(),cin>>b就可以执行”。答案是不是的,因为在第一次输入字符时候cin>>a;因为类型不符合,就不会从输入流中提取数据,也就是说,输入流中,上一次输入的字符仍然存在。那么我们可以使用cin.sync()来清空输入流。cin>>a;cin.clear();cin.sync();cin>>b;总之,cin.clear()一般要和cin.sync()一起用
0 0
- cin标准输入流错误处理
- cin标准输入流的错误处理
- cin标准输入流错误清理
- cin标准输入流错误清理
- cin输入错误处理
- cin输入操作处理
- std::cin.getline()输入缓冲区溢出错误处理
- C++ 标准输入 cin 使用
- cin错误处理
- cin的错误处理
- 解决cin输入类型错误
- C++语言基础之标准输入cin
- 标准输入的原理:cin与scanf
- 读取数字的循环,用cin表达式的值判断错误输入并清除cin流接受新的输入
- cin深入分析(上) - cin输入操作处理【转载】
- cin深入分析(上) - cin输入操作处理(转)
- 标准输入输出流cin、cout
- C++中cin输入错误的解决办法
- EL 表达式中自定义函数
- 冒泡排序
- 大数进制转化
- 循环-12. 打印九九口诀表(15)
- 异步POST请求及加载信息到UitabView上
- cin标准输入流错误处理
- 使用 audio 和 embed 实现浏览器兼容的网页声音播放
- 大整数因子
- ZOJ 2112 [树状数组套主席树]
- dba_segments各字段的含义
- DFSDFSDFDSGDFGDGFFGDGHDHFGJHG
- 统计n-k特殊集的数目
- 海量数据处理专题(一)——开篇
- bzoj3668 [Noi2014]起床困难综合症