2017-06-14 118 views
-6
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的答案。 什麼是問題,如何解決?程序告訴我初始化寫一個簡單的C++代碼時不需要初始化的變量

+3

在你的代碼中,它們沒有被初始化。 – Slava

+3

你在哪裏接受用戶輸入 –

+0

Declaring =/=正在初始化 – jhhoff02

回答

1

初始化與聲明不同。 初始化變量,你需要給它一個值:

double x1 = 2.0; 
double x2 = 3.7; 

顯然,硬編碼的數值是非常有用的。您應該從用戶或其他外部來源獲得輸入。

+0

謝謝,但在給定的提到,我必須提示用戶輸入值。我做了更進一步:cout <<「輸入第一個點的x和y座標:」<< endl; cin >> x1 >> y1; cout <<「輸入第一個點的x和y座標:」<< endl; cin >> x2 >> y2; – Fanono

+0

我建議你看看std :: cin或scanf。有一點建議,雖然:我看到你的問題得到低估,主要是因爲這些東西可以通過一些簡單的在線搜索找到。您應該對教程網站進行更多的研究,甚至可以回收這個問題。 – BareMetalCoder

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); 
1

定義局部變量時,它們不會自動初始化。他們將避免不確定的值,並且它們的使用將導致未定義的行爲

如果你想讓你的本地變量實際上有一個值,你需要初始化他們。

另請注意,初始化不能反向工作。沒有循環C++從上到下執行語句。如果在使用變量後對變量進行初始化,那麼這些變量不會神奇地返回,或者使用未初始化的變量重新進行計算。


至於錯誤的答案,這是一個單獨的問題,但這一切都取決於您初始化變量的值。如果你在之後得到輸入,那麼你使用變量,然後如上所述計算將不會被重做。

控制的流程應該是這樣的:

variable declarations and definitions (possible with initializations) 

get input from user 

do calculations using the input from the user 
3

什麼問題,以及如何被解析?

這是進一步下跌,這個問題是不是在輸入

你需要看課本和理解語言的基礎知識。語句從左到右,從上到下執行。所以如果你有更多的用戶輸入,你可以在之後得到用戶輸入你使用單位變量進行計算。你編寫的代碼不是數學等式,而是指示虛擬C++機器在每一步中要做什麼。