2015-03-02 40 views
1

這是我的實驗程序。我必須應用兩個公式併爲兩者打印答案。第一個是在這一行:在C++計算中無法獲得正確答案

cout<<"Hypoteneus is: " <<sqrt((x*x)+(y*y)) <<endl; 

這一個工作。問題是在這一個:

cout<<"Area is: " <<a*x <<((1/2)*x*y); 

的問題是,它打印其答案爲0。我把a*x進行測試,這工作,但表達(1/2)*x*y被渲染0作爲答案。我輸入x爲1和y爲2.請幫助。

int main() 
{ 
    float x, y, a=122; 
    cout<<"Enter x and y.\n"; 
    cin>>x >>y; 
    cout<<"Hypoteneus is: " <<sqrt((x*x)+(y*y)) <<endl; 
    fflush(stdin); 
    cout<<"Area is: " <<a*x <<((1/2)*x*y); 
    getch(); 
    return 0; 
} 
+3

'fflush(stdin)'是直線的未定義行爲。去掉它。 – chris 2015-03-02 18:50:36

+1

也是不必要的。 – nikaltipar 2015-03-02 18:51:21

+2

調試提示:如果您對爲什麼某行沒有給出您所期望的答案感到困惑,請將其分解成小塊並打印以找出錯誤發生的位置:'cout <<(1/2)<<「 ,「<<(1/2)* x <<」,「<<(1/2)* x * y <<」\ n「;' – indiv 2015-03-02 18:53:16

回答

9

((1/2)*x*y)應該是((1.0/2.0)*x*y)(0.5*x*y)
否則,編譯器將理解int/int,結果將爲int,因此您的預期0.5將變爲0

3

1/2指定整數運算,將結果截斷爲最接近的整數,即零。

使用0.5f1.0f/2.0f表示float與正確的值不變。或者除以二而不是乘以一半。

相關問題