获取无限循环而不是值

Getting infinite loop instead of a value

这是下面的问题。

我在 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);
}

虽然你用的是RTTI,但是in的类型在编译时是固定的。另外,在这里您不能直接比较 int 变量的 typeid 和函数类型。他们不会是一样的。所以这样的设计是无稽之谈。检查输入是否满足整数输入要求。基本上你有两种方法:

  1. 检查是否设置了cinfailbit
  2. 改为读取 string 并检查字符串中的每个字符是否为数字。

typeid(in) == typeid(int()) 等同于 typeid(int) == typeid(int()) 因为 inint.

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

与类型int如此不同。

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

条件

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

将评估为 false。

要使其评估为真,您需要

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

Running sample

但是,正如已经说过的,如果您想要检查输入是否正确,这不是正确的方法。