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的答案。 问题是什么以及如何解决?
答案 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