当我们使用cin函数作为输入的时候,可能会出现输入错误的问题,例如下面给出的例子
#include <iostream>
using namespace std;
int main()
{
int number;
cin>>number; //输入字符
cout<<"first input"<<endl;
cin>>number; //继续输入字符
cout<<"end input!"<<endl;
system("pause");
return 0;
}
程序结果如下,可以看到当我们第一次输入字符‘u’时,与本身number的int型冲突,因此输入是失败的,当我们继续调用cin函数作为输入时,很明显 ,已经不能输入了。
怎样才能继续输入呢?这里就是我们需要提到的函数cin.clear(),当cin函数输入错误的时候,cin里面有个函数可以自动检测到输入错误,若想继续输入便要清楚掉这个错误。这里我们可以利用函数cin.rdstate()函数来读取错误的标识符看看。
#include <iostream>
using namespace std;
int main()
{
int number;
cin>>number;
cout<<"first input"<<endl;
cout<<cin.rdstate()<<endl;
cin>>number;
cout<<"end input!"<<endl;
system("pause");
return 0;
}
可以看到结果为4,这里的4对应的是错误类型。
0 :goodbit 无错误
1 :Eofbit 已到达文件尾
2:failbit 非致命的输入/输出错误,可挽回
3:badbit 致命的输入/输出错误,无法挽回
这里应该明白了cin.clear函数的作用了,就是清楚这个错误状态。在具体使用的时候,除了清楚完这个状态之外,我们还需要,把缓冲区里输入字符清除掉,因为之前我们的输入错误,导致了这些字符仍然留在缓冲区内。这里我们需要用到 cin.sync()函数,将我们输入的错误字符清理掉。我们修改代码如下:
#include <iostream>
using namespace std;
int main()
{
int number;
cin>>number;
cout<<"first input"<<endl;
cout<<cin.rdstate()<<endl;//查看错误状态
cin.clear(); //清理错误表示符
cout<<cin.rdstate()<<endl;//查看错误状态
cin.sync();//清理缓冲区内容
cin>>number;
cout<<"end input!"<<endl;
system("pause");
return 0;
}
可以看到测试结果成功!
SUST狗子 发布了11 篇原创文章 · 获赞 3 · 访问量 2299 私信 关注