C++中cin.clear()的用法
我们谈谈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"
);
}
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"
);
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。