C++ 如何验证输入仅为数字?

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

我不想检查年龄是否为数字。在本例中,它将接受1E作为数字,而不接受E1,我不想只接受数字
没有任何符号或字母

 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'