当我输入时,为什么以下验证码会卡在cin.ignore上 1.w,当我进入w.1时进入无限循环? 我正在尝试创建验证数字输入的代码。我已经根据其他帖子提供的建议创建了代码,但我仍然遇到问题。
//The code is validation code used to check if input is numerical (float or integer).
#include <iostream>
#include <string>
#include <limits> // std::numeric_limits
using namespace std;
int main ()
{
string line;
float amount=0;
bool flag=true;
//while loop to check inputs
while (flag){ //check for valid numerical input
cout << "Enter amount:";
getline(cin>>amount,line);
//use the string find_first_not_of function to test for numerical input
unsigned test = line.find_first_not_of('0123456789-.');
if (test==std::string::npos){ //if input stream contains valid inputs
cout << "WOW!" << endl;
cout << "You entered " << line << endl;
cout << "amount = " << amount << endl;
}
else{ //if input stream is invalid
cin.clear();
// Ignore to the end of line
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
}
return 0;
}
答案 0 :(得分:3)
首先,'0123456789-.'
应为"0123456789-."
(请注意双引号)。前者是一个多字节字符文字。
当您输入1.w
时:
1
由cin>>amount
提取。.w
由getline
ignore
等待输入当您输入w.1
时:
cin>>amount
失败,failbit
设置getline
无法提取,因此line
保持为空test
等于npos
,因此我们永远不会输入else
块来清除流