C++ 获取无限循环而不是值

C++ 获取无限循环而不是值,c++,infinite-loop,do-while,typeid,typeinfo,C++,Infinite Loop,Do While,Typeid,Typeinfo,这就是下面的问题 在do-while循环中,我得到的是一个无限循环,而不是int类型的数据 #include <iostream> #include <typeinfo> int main() { int in; // variable in; do //loop for check if variable get valid data { std::cout << "enter : "; std

这就是下面的问题

在do-while循环中,我得到的是一个无限循环,而不是int类型的数据

#include <iostream>
#include <typeinfo>
int main()

{
    int in; // variable in;

    do //loop for check if variable get valid data
    {

        std::cout << "enter : ";

        std::cin >> in;

        if (typeid(in) == typeid(int()))
            break;
        else
            std::cout << "invalid input !! " << std::endl;
    } while (true);
}
#包括
#包括
int main()
{
int-in;//变量in;
执行//循环检查变量是否获取有效数据
{
std::cout>in;
if(typeid(in)=typeid(int())
打破
其他的

std::cout虽然您使用RTTI,但在编译时,
中的
类型是固定的。此外,在这里您不能直接比较
int
变量的
typeid
和函数类型。它们将不相同。因此这种设计是无意义的。要检查输入是否满足整数输入的要求,基本上您有two方式:

  • 检查是否设置了
    cin
    failbit
  • 改为读取
    字符串
    ,并检查字符串中的每个字符是否为数字
  • typeid(in)==typeid(int())
    相当于
    typeid(int)==typeid(int())
    ,因为
    in
    int

    int()
    是函数的签名:不带参数,返回
    int

    因此不同于类型
    int

    检查输入有效性的方法是检查状态。

    条件

    if (typeid(in) == typeid(int()))
    
    将计算为false

    要使其评估为真实,您需要

    if (typeid(in) == typeid(int))
    


    但是,正如前面所说的,如果你想检查输入是否正确,这不是办法。

    那么,为什么条件失败,并且存在一个无限循环?@Gupta我注意到了我的错误,我会稍后编辑它,谢谢。int和int()之间有一个区别。在你的程序中,以下内容将保持:
    typeid(In)=typeid(int)
    。您可以通过打印出
    typeid(int())来进一步检查。name()
    作为旁注,我不确定您为什么需要将所有数据包装到while循环中。正如其他人所说,无限循环是由于
    int
    int()
    是不同的类型。但实际上,检查没有任何意义:
    typeid(in)
    是固定的(即它是
    typeid(int)
    ),无论用户输入什么。输入后,例如
    abc
    中的
    仍然是一个inttypeid(int())和typeid(int)创建两个具有相同信息的typeid实例。这就是为什么要使用等于操作的原因failing@JohnDing是的,但目的不太清楚,可能是OP只是想了解如何使用它。我改变了答案,让它更清楚。