如何限制用户只能在 C++ 程序中输入实数?
例子:
双数;cin >> 数字;
并且它不会接受如下输入: '12add' , 'abcd' 等...
有人可以指导我吗?使用布尔值。谢谢!
如何限制用户只能在 C++ 程序中输入实数?
例子:
双数;cin >> 数字;
并且它不会接受如下输入: '12add' , 'abcd' 等...
有人可以指导我吗?使用布尔值。谢谢!
您不能强迫用户提供正确的输入。但是,如果先前的输入无效,您可以要求他们提供另一个输入。有不同的程序可以这样做。一种是以下:
getline
读取一行这没关系,而且很常见。它虽然使用动态内存。另一种选择是:
cin >> value;
像平常一样使用cin.fail()
输入是否被正确读取(cin.eof()
也检查)如果失败,忽略所有输入,直到出现空格:
char c;
while (cin >> c)
if (isspace(c))
break;
这具有额外的优势,即在这样的错误输入中:
abc 12.14
您不会忽略整行,而只是忽略abc
.
我总是使用此代码来请求特定类型的输入(字符串和字符除外)。这个想法是请求任何数字类型并使用 stringstream 来查看它是否可以存储为请求的类型,如果不是,它将一直提示用户,直到他输入请求的类型。
template <typename T> // will not work with strings or chars
T forceInputType_T() {
T name;
bool check = false;
string temp;
while (check == false) {
cin >> temp;
stringstream stream(temp);
if (stream >> number) {
check = true;
} else {
cout << "Invalid input type, try again..." << endl;
}
}
return name;
}
如果您想使用布尔值,那么您可以检查字符串中的每个字符是否包含一个数字而不是返回 false 并通过循环继续询问有效输入!
查看sscanf
功能。
不幸的是,您无法避免它...您可以接受字符串作为输入并解析字符串(可能使用正则表达式)以确保正确性。
您不能限制用户在键盘上键入的内容。您可以接受它std::string
并使用boost::lexical_cast
它来将其转换为您期望的数字类型并捕获和处理boost::bad_lexical_cast
异常。
double number
if (cin >> number) {
do_stuff_with(number);
} else {
std::cerr << "That wasn't a number!";
}
您可以检索您的数据,std::string
然后使用标准字符串转换函数之一来查看内容是否符合您的期望。
您可以使用正则表达式来解决它
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);
}
请记住,在标头中包含正则表达式库。
用这个:
#include <conio.h>
#include <string>
#include <iostream>
using namespace std;
int main() {
cout << "Input a positive whole integer: ";
string currentInput;
while (true) {
char ch = getch();
if (ch <= '9' and ch >= '0') cout << ch; currentInput += ch;
// Handle other keys (like backspace, etc)
else if (ch == '\r') cout << endl; break;
}
}