【发布时间】: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