C++ 获取无限循环而不是值
这就是下面的问题 在do-while循环中,我得到的是一个无限循环,而不是int类型的数据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
#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只是想了解如何使用它。我改变了答案,让它更清楚。