我是cthon的新手,来自python背景。
如果我想要用户输入然后我想检查输入的数据类型(例如整数或浮点数),我怎样才能声明我想要将用户输入分配给的变量? / p>
答案 0 :(得分:22)
简短的回答:你不能。
答案很长:你做不到。 C ++是一种静态类型语言,这意味着您必须在编译时定义类型。 Python是动态类型的,因此对象的类型可以在一行之间改变。
如果你想从用户那里得到一些输入,你可以使用一个字符串。
例如,如果要从用户获取整数输入:
int n;
std::cin >> n;
浮动输入:
float x;
std::cin >> x;
等等。请注意,在这两种情况下,如果用户输入的不是整数或浮点数,则必须检查std :: cin的标志,看是否有错误。
但是你需要告诉用户“立即输入整数”或“立即输入浮点数”。你不能只接受一些任意类型。相反,设计代码,以便为整数或浮点输入提供替代代码路径。或强制其中一个,并在输入错误时输出错误。
不要像使用Python那样编写代码。惯用的Python代码不是惯用的C ++代码,你完成事情的方式看起来也不一样。
在C ++中,获取任意输入的方式如下:
std::string input;
std::cin >> input;
if (IsInteger(input))
{
// do stuff with integer
}
else if (IsFloat(input))
{
// do stuff with float
}
else
{
std::cout << "Bad Input!" << std::endl;
}
编辑:在评论中指出 MSalters ,您实际上可以使用boost::lexical_cast<T>(expr)
将字符串表示形式转换为某种类型T(其中T通常类似于int,float,double等)。请注意,您可能仍需要进行一些检查以查看expr
实际上是否为整数,浮点数或其他。
答案 1 :(得分:5)
当您收到用户的输入后,它将以string
的形式到达。例如:
std::string inp;
std::cin >> inp;
然后,您获取inp
的内容(这是用户键入的内容),然后查看其中包含的内容。此时,您可以根据它是否包含(a)所有数字,(b)数字和小数点,或(c)完全不包含其他内容来做出决定。
答案 2 :(得分:3)
从用户收集字符串然后再解析它会好得多。
这个问题是寻找答案的地方: How to parse an int from a string
答案 3 :(得分:1)
C ++是一种静态类型语言。必须在编译时知道所有变量类型。
答案 4 :(得分:1)
Python是动态类型语言,相反,c / c ++是静态类型语言。无法在运行时找到类型并声明。