基础 - 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);
...................................................