r******9 发帖数: 129 | 1 bool done = false;
int sel;
do{
cin >> sel;
if(cin.fail())
{
cout << "invalid input("<
cin.clear();
}
else if(sel <0 || sel >= idx)
{
cout << "out of range [0-"<< idx-1 <<"], try again " << endl;
}
else
{
done = true;
}
}while(done == false);
如入 ‘a', 结果就死循环了, cin.clear()不是可以reset cin么? |
l******e 发帖数: 12192 | 2 add cin.ignore() or cin.flush()
【在 r******9 的大作中提到】 : bool done = false; : int sel; : do{ : cin >> sel; : if(cin.fail()) : { : cout << "invalid input("<: cin.clear(); : } : else if(sel <0 || sel >= idx)
|
I*****y 发帖数: 602 | 3 clear() actually only resets the state flags. You need add
std::cin.ignore(std::numeric_limits::max(), '\n');
after the clear() to remove invalid input from input stream.
【在 r******9 的大作中提到】 : bool done = false; : int sel; : do{ : cin >> sel; : if(cin.fail()) : { : cout << "invalid input("<: cin.clear(); : } : else if(sel <0 || sel >= idx)
|