使用 C++ 验证数字
Validating a number using c++
我正在尝试验证用户输入的整数 (getUserInteger)。当输入的值不是整数时,while 循环应该清除缓冲区,重置缓冲区的错误状态,打印“错误条目,重试:”然后请求一个新数字。
在请求新号码之前,一切似乎都运行良好。循环中的“cin >> number”从不接缝 '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'
我正在尝试验证用户输入的整数 (getUserInteger)。当输入的值不是整数时,while 循环应该清除缓冲区,重置缓冲区的错误状态,打印“错误条目,重试:”然后请求一个新数字。
在请求新号码之前,一切似乎都运行良好。循环中的“cin >> number”从不接缝 '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'