如果输入的内容不是数字,例如,此代码可以正常工作F
:它将打印错误消息。但是,如果我输入例如2F2
或者,它将需要2
并通过检查,继续我的代码,然后在下一个cin >>
语句中将F
放入,然后循环返回并将2
放入。
我如何制作它只接受一个数字,例如2
而不是{} 2F2
或2.2
?
int bet = 0;
// User input for bet
cout << " Place your bet: ";
cin >> bet;
cout <<
// Check if the bet is a number
if (!cin.good())
{
cin.clear();
cin.ignore();
cout << endl << "Please enter a valid number" << endl;
return;
}
答案 0 :(得分:0)
bool Checknum(std::string line) {
bool isnum = true;
int decimalpoint = 0;
for (unsigned int i = 0; i < line.length(); ++i) {
if (isdigit(line[i]) == false) {
if (line[i] == '.') {
++decimalpoint; // Checks if the input has a decimal point that is causing the error.
}
else {
isnum = false;
break;
}
}
}
if (decimalpoint > 1) // If it has more than one decimal point.
isnum = false;
return isnum;
}
如果你从用户那里拿一个字符串,这应该有效。您可以将字符串转换为整数或浮点数(分别为stoi或stof)。它可能不是最好的解决方案,但这就是我所拥有的。请原谅。
答案 1 :(得分:0)
getline
从cin
读取整行输入。stringstream
来解析你得到的字符串。#include <sstream>
...
int bet = 0;
std::cout << " Place your bet: ";
while (true)
{
std::string temp_str;
std::getline(cin, temp_str);
std::stringstream parser(temp_str);
if (parser >> bet && (parser >> std::ws).eof())
break; // success
cout << endl << "Please enter a valid number" << endl;
}
此代码会一直打印错误消息,直到收到有效输入。不确定这是你想要的,但它是非常习惯的用户界面。
这里>> ws
表示“读取所有空格”。 eof
(“文件结尾”)表示“输入字符串的结尾”。