使用 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'