C++中cin.clear()的用法
来源:互联网 发布:苹果如何清理游戏数据 编辑:程序博客网 时间:2024/06/04 19:03
我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin里面的数据流,而实际上却与此相差很远,首先我们看看以下代码:
#include <iostream>
using
namespace
std;
int
main()
{
int
a;
cin>>a;
cout<<cin.rdstate()<<endl;
if
(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(),请看下例:
goodbit 无错误
Eofbit 已到达文件尾
failbit 非致命的输入/输出错误,可挽回
badbit 致命的输入/输出错误,无法挽回 若在输入输出类里.需要加ios::标识符号
通过cin.clear,我们能确认它的内部标识符,如果输入错误则能重新输入.结合真正的清空数据流方法cin.sync(),请看下例:
#include <iostream>
using
namespace
std;
int
main()
{
int
a;
while
(1)
{
cin>>a;
if
(!cin)
//条件可改写为cin.fail()
{
cout<<
"输入有错!请重新输入"
<<endl;
cin.clear();
cin.sync();
//清空流
}
else
{
cout<<a;
break
;
}
}
system
(
"pause"
);
}
上面的cin.clear()默认参数为0,即无错误,正常操作.当我们输入英文字母'k'时,它的状态标识改为fail,即错误,用cout对用户输出信息,再用cin.clear让错误标识改回为0,让我们可以继续输入,再清空流数据继续输入.如果我们没有了cin.clear,则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为fail,当运行到条件判断时,便总是回到错误的条件表示里,并且我们再也没办法输入,因为错误的表示关闭了cin,所以会进入死循环.
转自http://www.cnblogs.com/tonglingliangyong/p/3908463.html
0 0
- C++中cin.clear()的用法
- C++中cin.clear()的用法
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin.clear()、cin.sync()和cin.ignor()的用法
- cin.clear()、cin.sync()和cin.ignor()的用法
- C++_Primer中关于cin.clear()的例题
- cin学习--------cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.
- in.clear()、cin.sync()和cin.ignor()的用法
- C/C++中cin,cin.getline,getline的用法
- c++中cin.clear()的重要性
- c++中cin.clear()的重要性
- cin、cin.get()、cin.getline()、getline()、gets()等函數的用法 以及cin.ignore,cin.clear等。。
- 浅析cin.getline,cin.get,cin.ignore,cin.clear用法
- cin.clear cin.sync 等函数用法
- C++:cin、cin.getline()、getline()的用法
- C++:cin\cin.getline()\getline()的用法
- C++ 中 cin cin.get() cin.getline()的用法
- linux命令dd
- python中的raw_input() 与 input()
- shiro教程(4)-shiro与项目集成开发
- android WebView上传文件到服务器[android+server代码]
- Image Pre-compensation: Balancing Contrast and Ringing
- C++中cin.clear()的用法
- LinearLayout的showDividers在小米上不管用的解决办法
- 静态代码块、非静态代码块、构造方法执行顺序
- Java学习----day7——(3)匿名内部类
- Js读取check的几种方法
- 历届试题 最大子阵
- iOS 在Unit Testing 里面使用第三方库
- 【Eigen】How to "install" Eigen?
- BestCoder Round #93酱油记