【问题标题】:Validating a number using c++使用 C++ 验证数字
【发布时间】:2021-03-28 00:21:09
【问题描述】:

我正在尝试验证用户输入的整数 (getUserInteger)。当输入的值不是整数时,while循环应该清除缓冲区,重置缓冲区的错误状态,打印“bad entry, try again:”,然后请求一个新的数字。

在要求新号码之前,看起来一切正常。循环中的“cin >> number”永远不会缝合“命中”并继续遍历循环并计算“错误条目......”。我终其一生都无法弄清楚为什么。感谢您的帮助!

#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;
}

【问题讨论】:

    标签: c++ loops validation buffer infinite


    【解决方案1】:

    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'
    

    【讨论】:

      【解决方案2】:

      _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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-14
        • 1970-01-01
        相关资源
        最近更新 更多