如何限制用户只能在C++程序中输入实数?限制用户只能在C++中输入实数
实施例:
双号; cin >>编号;
,它不会接受像输入:“12add”,“ABCD”等等......
可有人指导我吗?使用bool值。 谢谢!
如何限制用户只能在C++程序中输入实数?限制用户只能在C++中输入实数
实施例:
双号; cin >>编号;
,它不会接受像输入:“12add”,“ABCD”等等......
可有人指导我吗?使用bool值。 谢谢!
不幸的是,你不能避免它...你可以接受一个字符串作为输入,并解析字符串(也许与正则表达式)的正确性。
您可以检索您的数据为std::string
,然后使用标准字符串转换函数之一来查看内容是否符合您的期望。
这是一些伪代码;
double num;
while(num != realNum) //check input is valid
{
cin >> num;
}
....
您无法限制键盘上的用户类型。您可以接受它std::string
并使用boost::lexical_cast
将其转换为您的预期号码类型并捕获并处理boost::bad_lexical_cast
异常。
您无法强制用户输入正确的信息。但如果以前无效,您可以要求他们提供另一个输入。有不同的程序可以这样做。是下列其中一项:
getline
读取线这是正常的而且很常见。它使用动态内存。另一种选择是:
cin >> value;
就像你通常做cin.fail()
,看是否输入正确读取(检查cin.eof()
也)如果失败,忽略所有输入,直到空白:
char c;
while (cin >> c)
if (isspace(c))
break;
这有一个额外的好处,在这样的错误输入:
abc 12.14
你不要忽略整条线,而只是abc
。
double number
if (cin >> number) {
do_stuff_with(number);
} else {
std::cerr << "That wasn't a number!";
}
查看sscanf
函数。
您可以使用正则表达式来解决它
double inputNumber()
{
string str;
regex regex_double("-?[0-9]+.?[0-9]+");
do
{
cout << "Input a positive number: ";
cin >> str;
}while(!regex_match(str,regex_double));
return stod(str);
}
请记住,包括头的正则表达式库。
sudo =“** S ** uper ** U ** ser ** DO **”(或可能是“** S ** ubstitute ** U ** ser ** DO **”。Pseudo =“假”。 – BoBTFish