Saturday, August 16, 2008

C++学习笔记(八) -- cin状态错误造成的死循环

int i;
while (1)
{
cout << "input a number: ";
cin >> i;
if(cin && i >= 0 && i <= 100)
break;
else
{
cin.clear();
cout << "error" << endl;
}
}
上面这段代码中, 在要求输入i的地方, 如果输入了非数字, 就会造成死循环. 具体原因在于非数字字符仍然保留在缓冲区中, 所以当下一次cin读取的时候, 就直接从缓冲区中读取, 这样一直循环, 每次都是读取的非数字字符, 造成了死循环. 修改else里面的语句为:
else
{
cin.clear();
cin.ignore(1024, '\n');
cout << "error" << endl;
}
ignore()的作用主要是从缓冲区中取字符并丢弃, 就起到了刷新缓冲区的作用.

No comments:

Post a Comment