基础 - C++中cin输入问题

场景:cin输入一个整数,但是在console输入了其他如字符,字符串。当判断输入错误再重新输入时【 如while()内重复判断知道输入格式正确 】,可能进入死循环。

解释:console输入时所按的回车键也算是输入符并保存在输入缓冲区中,在进行下一次读取时读到“\n”【windows中按回车键("\r")会转换成(“\n”)换行符】

代码:

   bool flag = false;//判断控制台正确输入
  int op;
    do
    {
        cin >> op;//cin在控制台按回车使会读入回车符到缓冲区,并在下一次输入时读取缓冲区内容到变量;
        cin.clear();//条件状态的复位(goodbit Eofbit failbit badbit这几个状态标识符,cin输入错误时状态置为(3)或(4),可用clear()恢复到0即goodbit状态)
        //cin.ignore();//精准清空缓冲区
        cin.sync();//清空缓冲区
        if (op == 1 || op == 2)
        {
            flag = true;
        }
        else
        {
            cout << "输入错误,重新输入:" << endl;
        }

    } while (!flag);

 

posted @ 2019-04-17 21:30  丨Kouch  阅读(387)  评论(0编辑  收藏  举报