程序告诉我在编写简单的c ++代码时初始化不需要初始化的变量

时间:2017-06-14 14:16:13

标签: c++

double distance, point, point1, point2;
double x1,y1;
double x2, y2;

point1 = pow((y1-y1),2);
point2 = pow((x1-x2),2);

point = point1+point2;

distance = sqrt(point) ;

我正在编写一个简单的c ++程序来提示用户输入2个坐标并计算它们之间的距离。添加sqrt函数时,我得到的是我应该初始化变量x1,x2,y1,y2。我这样做但是我得到了距离为0的答案。 问题是什么以及如何解决?

4 个答案:

答案 0 :(得分:3)

  

问题是什么以及如何解决?

     

进一步下来,问题不在输入

您需要阅读教科书并理解该语言的基础知识。语句从左到右,从上到下执行。因此,如果您有进一步向下的用户输入,则在之后用户输入,您使用了unitiliazed变量进行计算。您编写的代码不是数学方程式,而是指向虚拟C ++机器的每个步骤中的操作。

答案 1 :(得分:1)

初始化与声明不同。 要初始化变量,您需要为其赋值:

double x1 = 2.0;
double x2 = 3.7;

显然,对值进行硬编码并不是很有用。您应该从用户或其他外部来源获得输入。

答案 2 :(得分:1)

这意味着只宣告

double distance, point, point1, point2;
double x1,y1;
double x2, y2;

但你应该:

double distance{ 0.0 };
double point{ 0.0 };
double point1{ 0.0 };
double point2{ 0.0 };
double x1{ 0.0 };
double y1{ 0.0 };
double x2{ 0.0 };
double y2{ 0.0 };

另一方面,你的等式是错误的,你必须这样做:

point1 = pow((y2 - y1), 2);    // y2 - y1 
point2 = pow((x2 - x1), 2);    // x2 - x1 

而不是

point1 = pow((y1-y1),2);  // y1 - y1 is 0
point2 = pow((x1-x2),2);

答案 3 :(得分:1)

定义局部变量时,它们不会自动初始化。它们将具有不确定值,并且它们的使用将导致未定义的行为

如果您希望本地变量实际具有值,则需要初始化它们。

另请注意,初始化不会后退。没有循环,C ++从上到下执行语句。如果在使用它们之后初始化变量,那么它不会神奇地回溯到时间,或者使用未初始化的变量重新计算。

至于错误的答案,这实际上是一个单独的问题,但这完全取决于你用变量初始化变量的值。如果您在之后获得输入,则使用变量然后如上所述,计算将不会重做。

控制流程应该是这样的:

variable declarations and definitions (possible with initializations)

get input from user

do calculations using the input from the user