现在我正在使用此功能来获取用户输入。
int getOnlyNumber(int num)
{
while (!(cin >> num)) {
// Reset the input:
cin.clear();
// Get rid of the bad input before return was pressed:
while (cin.get() != '\n')
{
continue;
}
// Ask user to try again:
cout << "Please enter a number: ";
}
return num;
}
如果首先输入字母,这似乎只能捕获错误的输入。如果首先输入一个数字,程序会接受它。防爆。它将接受1e但会捕获e1。 这是这样使用的:
displayChoice = getOnlyNumber(displayChoice);
其中displayChoice是一个int。 我需要更改以捕获1e作为输入或任何其他以数字开头但具有字符串的输入?
答案 0 :(得分:0)
如果你给它一个部分数字,那么,默认情况下,它会尽力而为,并为你提供它设法理解的位。
如果您想查看转换过程中是否有错误,则必须检查cin.fail()。
while (!(cin >> num) || cin.get()!='\n') {
...
答案 1 :(得分:0)
您可以使用std::all_of
来测试整个字符串是否为数字:
std::string str;
auto is_digit_check = [] (unsigned char c) { return std::isdigit(c); };
while (!(std::cin >> str) ||
!std::all_of(str.begin(), str.end(), is_digit_check))
{
std::cin.clear();
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
return std::stoi(str);