C++中cin.clear()函数的说明及具体使用

当我们使用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函数作为输入时,很明显 ,已经不能输入了。

C++中cin.clear()函数的说明及具体使用

 怎样才能继续输入呢?这里就是我们需要提到的函数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 致命的输入/输出错误,无法挽回 

C++中cin.clear()函数的说明及具体使用

这里应该明白了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;
}

可以看到测试结果成功!

C++中cin.clear()函数的说明及具体使用

C++中cin.clear()函数的说明及具体使用C++中cin.clear()函数的说明及具体使用 SUST狗子 发布了11 篇原创文章 · 获赞 3 · 访问量 2299 私信 关注
上一篇:图形化桌面环境中的脚本编程


下一篇:Linux 企业发行版基准测试:CentOS 和 Ubuntu 被击败