限制用户只能在C++中输入实数
Restrict user to input real number only in C++
如何限制用户只能在C++程序中输入实数?
示例:
双数;cin>>数;
并且它不会接受输入,比如:"12add"、"abcd"等…
有人能给我指引吗?使用bool值。谢谢
您不能强迫用户提供正确的输入。但是,如果先前的输入无效,您可以要求他们提供另一个输入。有不同的程序可以做到这一点。一个是:
- 使用
getline
读取一行 - 分析并理解该行
- 如果行无效,则向用户提供错误并转到1
这很正常,也很常见。不过它使用了动态内存。另一种选择是:
- 像往常一样使用
cin >> value;
- 检查
cin.fail()
以查看输入是否正确读取(同时检查cin.eof()
) -
如果失败,忽略所有输入,直到空白:
char c; while (cin >> c) if (isspace(c)) break;
这还有一个额外的优点,即在这样的错误输入中:
abc 12.14
你不会忽略整行,而只是忽略abc
。
我总是使用此代码来请求特定类型的输入(字符串和字符除外)。这个想法是请求任何数字类型,并使用字符串流来查看它是否可以存储为请求的类型,如果不能,它将一直提示用户,直到他输入请求的类型。
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,并通过循环不断要求有效的输入!
您不能限制用户在键盘上键入的内容。您可以将其接受为std::string
,并使用boost::lexical_cast
将其转换为您期望的数字类型,并捕获和处理boost::bad_lexical_cast
异常。
您可以将数据检索为std::string
,然后使用其中一个标准字符串转换函数来查看内容是否符合您的期望。
double number
if (cin >> number) {
do_stuff_with(number);
} else {
std::cerr << "That wasn't a number!";
}
查看sscanf
函数。
不幸的是,您无法避免它…您可以接受字符串作为输入,并解析字符串(可能使用regex)以确保正确性。
您可以使用regex来解决
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);
}
请记住,在标头中包含regex库。
使用此:
#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;
}
}
相关文章:
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 检查输入是否不是整数或数字
- 正在尝试了解输入验证循环
- 读取文件并输入到矢量中
- C++如何通过用户输入删除列表元素
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- 用户定义函数中的指针和输入
- 如何在C++中检查2D数组中负值的输入验证
- 如何只允许用户输入正整数
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 输入中的字符串数未知(以字母表示)
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 在一个模板函数中,若输入的类型是enum类,我该如何使用std::underlying_type