2013-03-05 83 views
1

我正在做一個簡單的勾股式函數 用戶輸入兩個數字,兩個數字都發送到一個名爲Hypo的用戶定義函數,而hypo應該返回一個值C ,這是答案。用戶自定義函數的返回值有問題

這是我的腳本。

#include <stdio.h> 
#include <stdlib.h> 
#include <math.h> 

int hypo(double a, double b); 

int main(void) 
{ 
    double one, two; 
    //user inputs two variables 
    scanf("%lf %lf", &one, &two); 
    printf("Your C number is: %.2lf\n", hypo(one, two)); 

    system("PAUSE"); 
    return 0; 
} 

/*-------------------------------------------------------------------------*/ 

int hypo(double a, double b) 
{ 
    double c; 
    c = sqrt((a*a)+(b*b)); 
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c); 

    return c; 
} 

在我的電腦上,它一直工作到最後,返回c;由於某種原因,它將值0返回給Main函數。 (我測試過,看錯誤是在哪裏,因此在低功能的printscreening。)

我想了解這一點。

我很確定我有synax錯誤,或者有些東西我還沒有讀完,但已經過了我的頭,但是經過一個小時瀏覽書籍並檢查youtube視頻,我不明白爲什麼會這樣不工作。

編輯:

謝謝大家的快速回復!我把它改成了兩倍,(在這個過程中我意識到我的錯誤也是xD),現在它就像一種魅力。 很高興與速度有多快,你們所有的回答,我一定會直傳吧:)

+0

@PieterGeerkens:當然它編譯。 'double'到'int'是一個標準轉換,C風格的可變參數函數不提供任何類型檢查。這裏最大的問題是使用'scanf'和'printf',而不是類型安全的C++等價物。 – 2013-03-05 22:14:32

+1

我只看到'C'。 – 2013-03-05 22:32:15

回答

2

您需要返回類型更改爲雙:

double hypo(double a, double b) 
{ 
    double c; 
    c = sqrt((a*a)+(b*b)); 
    printf("Currently, A = %.2lf, and B = %.2lf, C = %.2lf\n", a, b, c); 

    return c; 
} 
+0

感謝您的回答^^ 那確實解決了問題:) – Farstride 2013-03-05 22:39:47

1

你有hypo返回一個int,但如果它是一個double你使用它。你應該切換到:

double hypo(double a, double b); 

而且,在實施:

double hypo(double a, double b) 
{ 
    double c; 
    // ... 

當您返回爲int,結果值c將被截斷到int,而不是顯示的全部價值。這會導致它將任何小於1.0的正數轉換爲0。此外,您的格式字符串指定了一個double,並且您傳遞了一個int,這將導致顯示始終打印錯誤的答案。

+0

錯誤的結果是由於格式字符串不匹配(int vs double),而不是四捨五入的結果。 – Roddy 2013-03-05 22:19:03

+0

@Roddy True - 編輯也包括這個...... – 2013-03-05 22:45:42

1

你定義了你的變量c爲double類型:

​​

但你試圖返回int

int hypo(double a, double b); 

您應該改變的hypo返回類型double或投cint。然而,在澆鑄會丟掉任何分數(使2.678到2):

return (int)c; 

因此,我建議你改變返回類型double代替,這也是嘗試計算斜邊時,更合乎邏輯的(可能包含小數位):

double hypo(double a, double b); 
+0

謝謝你解釋所有這些,這是一個「Doh!」當我閱讀你的解決方案時出錯,但細節和解釋將確保我不會再犯這個錯誤! :) – Farstride 2013-03-05 22:40:56

2

你的返回類型爲int當你可能想double - 小值將被鑄造並導致0(即0.5 0存儲在int時)。

您得到0的確切原因是格式不匹配 - 您使用浮點格式打印整數值。對於打印整數使用%d,但如果您正確指定返回類型hypodouble),此問題將消失。

+1

錯誤的結果是由於格式字符串不匹配(int vs double),而不是四捨五入的結果。 – Roddy 2013-03-05 22:19:47

+0

@Roddy,感謝評論 - 在答案中加入了內容。 – 2013-03-05 22:45:02