C++ 如何验证输入仅为数字?
我不想检查年龄是否为数字。在本例中,它将接受1E作为数字,而不接受E1,我不想只接受数字C++ 如何验证输入仅为数字?,c++,C++,我不想检查年龄是否为数字。在本例中,它将接受1E作为数字,而不接受E1,我不想只接受数字 没有任何符号或字母 int main() { int age= 0; std::cin >> age; if (std::cin.fail()) { std::cout << "I failed, try again ..." << std::endl; std::ci
没有任何符号或字母
int main()
{
int age= 0;
std::cin >> age;
if (std::cin.fail())
{
std::cout << "I failed, try again ..." << std::endl;
std::cin.clear(); // reset the failed state
}
intmain()
{
int年龄=0;
性病:cin>>年龄;
if(std::cin.fail())
{
std::cout确实是cin,提取操作符不适合解析用户输入。它们可以输入自动格式化的记录,但不能输入可能有自由格式错误的输入
如果使用基于行的输入,然后调用函数strtol(),则可以找到digits.strtol()它还处理过大而无法放入整数的减号和数字。它本质上是一个安全的整数解析器。此外,如果出现错误,您可以很容易地丢弃整行并要求用户重新输入,这通常是所需的行为。getline
+regex
@knivil,如果试图存储整数结果,则regex是无效的有点过头了。调用std::stoi
并进行适当的错误检查就足够了。@knivil使用regex
可能过头了。将std::cin
中的一行读入std::string
(例如,使用std::getline()
。然后根据您选择的任何标准检查字符串,以确定其是否包含数字。如果包含数字,请从字符串中提取数字(例如,使用std::istrstream
帮助)。如果要验证整行输入,则必须使用getline
读取字符串并检查内容。如果下一个语句是cin>>ch;
,则输入1E
有效。这将使您在age
中获得1
,在ch
中获得'E'
。