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

10 c++

我是cthon的新手来自python背景.

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

Mik*_*ley 22

简答:你做不到.

答案很长:你做不到.C++是一种静态类型语言,这意味着您必须在编译时定义类型.Python是动态类型的,因此对象的类型可以在行间更改.

如果你想从用户那里获得一些输入,你可以使用一个字符串.

例如,如果要从用户获取整数输入:

int n;
std::cin >> n;
Run Code Online (Sandbox Code Playgroud)

浮动输入:

float x;
std::cin >> x;
Run Code Online (Sandbox Code Playgroud)

等等.请注意,在这两种情况下,如果用户输入的不是整数或浮点数,则必须检查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;
}
Run Code Online (Sandbox Code Playgroud)

编辑:正如MSalters在评论中指出的那样,您实际上可以使用boost::lexical_cast<T>(expr)将字符串表示形式转换为某种类型T(其中T通常类似于int,float,double等).请注意,您可能仍需要检查是否expr实际上是整数,浮点数或其他.


Gre*_*ill 5

当您从用户那里获得输入时,它将作为a string.例如:

std::string inp;
std::cin >> inp;
Run Code Online (Sandbox Code Playgroud)

然后,您获取inp(无论用户输入的内容)的内容,并查看其内部以查看它包含的字符.此时,您可以根据它是否包含(a)所有数字,(b)数字和小数点,或(c)完全包含其他内容来做出决定.

  • `boost :: lexical_cast <float>(inp)`将使用当前的语言环境.事实并非如此困难,最困难的部分是与混合它们的真实用户打交道. (2认同)