我正在尝试验证用户输入的整数(getUserInteger(。当输入的值不是整数时,while循环应该清除缓冲区,重置缓冲区的错误状态,打印";输入错误,请重试:";然后要一个新号码。
在要求新号码之前,一切似乎都很顺利"cin>gt;数字";whithin循环从不缝合"hit",并继续在循环中迭代;错误的条目&";。我一辈子都弄不明白为什么。谢谢你的帮助!
#include <iostream>
#include <string>
#include <limits>
using namespace std;
// ----- Prototypes -----
int getUserInteger();
// ----- Main -----
int main (){
int userNumber;
userNumber = getUserInteger();
}
// ----- Functions -----
int getUserInteger() {
int number;
cin >> number;
while ( cin.fail() ) { // read failed, not int?
cin.ignore(numeric_limits<streamsize>::max(), 'n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
cout << "bad entry, try again: " << endl;
cin >> number;
}
return number;
}
cin.ignore
应位于cin.clear
之后。
错误:
cin.ignore(numeric_limits<streamsize>::max(), 'n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
固定:
cin.clear(); // reset error buffer
cin.ignore(numeric_limits<streamsize>::max(), 'n'); //clear buffer through 'enter'
_cin.ignore应位于cin.clear.之后
#错误:
cin.ignore(numeric_limits<streamsize>::max(), 'n'); //clear buffer through 'enter'
cin.clear(); // reset error buffer
固定:
cin.clear(); // reset error buffer
cin.ignore(numeric_limits<streamsize>::max(), 'n'); //clear buffer through 'enter'