获取无限循环而不是值
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
和函数类型。他们不会是一样的。所以这样的设计是无稽之谈。检查输入是否满足整数输入要求。基本上你有两种方法:
- 检查是否设置了
cin
的failbit
- 改为读取
string
并检查字符串中的每个字符是否为数字。
typeid(in) == typeid(int())
等同于 typeid(int) == typeid(int())
因为 in
是 int
.
int()
是函数的签名:不带参数,返回 int
.
与类型int
如此不同。
检查输入有效性的方法是检查 std::cin
状态。
条件
if (typeid(in) == typeid(int()))
将评估为 false。
要使其评估为真,您需要
if (typeid(in) == typeid(int))
但是,正如已经说过的,如果您想要检查输入是否正确,这不是正确的方法。
这是下面的问题。
我在 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
和函数类型。他们不会是一样的。所以这样的设计是无稽之谈。检查输入是否满足整数输入要求。基本上你有两种方法:
- 检查是否设置了
cin
的failbit
- 改为读取
string
并检查字符串中的每个字符是否为数字。
typeid(in) == typeid(int())
等同于 typeid(int) == typeid(int())
因为 in
是 int
.
int()
是函数的签名:不带参数,返回 int
.
与类型int
如此不同。
检查输入有效性的方法是检查 std::cin
状态。
条件
if (typeid(in) == typeid(int()))
将评估为 false。
要使其评估为真,您需要
if (typeid(in) == typeid(int))
但是,正如已经说过的,如果您想要检查输入是否正确,这不是正确的方法。