cin读取失败 死循环

来源:互联网 发布:不孕不育网络咨询 编辑:程序博客网 时间:2024/06/10 03:44

【问题】:

#include <iostream>
using namespace std;

int main()
{
    int a;
    while(1)
    {
        cin>>data;
        if(data==0)
            break;
    }

    return 0;
}
如果以上代码的程序运行时,输入的数不是整数,而是字符,则cin就会出错,导致while死循环

【原因分析】:

当cin尝试将输入的字符读为int型数据失败后,会产生一个错误状态cin.fail()。
而要用cin读取输入流中的数据,输入流必须处于无错误状态。因此,由于错误状态的存在,会一直执行while循环。

【解决办法】:
while(1)
{
    if (!cin.fail())
    {
        cout<<"input"<<endl;
        cin>>data;
    }
    else
    {
        cin.clear();//清除std::cin的错误状态
        cin.sync();//清空输入缓冲区
        cout<<"input again"<<endl;
        cin>>data;
    }
  
    if (data==0)
    {
        break;
    }
}