如何在知道变量之前声明变量?

时间:2011-07-18 03:25:51

标签: c++

我是cthon的新手,来自python背景。

如果我想要用户输入然后我想检查输入的数据类型(例如整数或浮点数),我怎样才能声明我想要将用户输入分配给的变量? / p>

5 个答案:

答案 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 ++是静态类型语言。无法在运行时找到类型并声明。