使用c++验证数字

Validating a number using c++

本文关键字:数字 验证 c++ 使用      更新时间:2024-04-28

我正在尝试验证用户输入的整数(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'