2012-09-02 55 views
0

我不明白爲什麼它工作正常,如果你改變所有的doubleint雙重回報0遞歸,但工作得很好,當INT

是有什麼錯我的printf語句?

您使用%f%lfdouble,對吧?

/* 
double power(double a, int b) that calculates the power ab. You are allowed to use the 
multiplication operator *. 
*/ 
#include <stdio.h> 
#include <conio.h> 
double power(double a,int b) 
{ 
    double buffer; 
    if(b > 1) 
    { 
     buffer = a * power(a,b-1); 
     return buffer; 
    } 
    else 
     return a; 
} 
int main(void) 
{ 
    double a; 
    int b; 
    int buffer; 
    scanf("%f",&a); 
    scanf("%d",&b); 
    buffer = power(a,b); 
    printf("%f",buffer); 
    getch(); 
} 
+0

嘗試''lf'爲'double','double'爲'buffer'。 –

+0

[cnicutar](http://stackoverflow.com/a/12235250/335858answer)正確地確定了代碼中的兩個問題,這些問題將使您的代碼正常工作,但第三個問題可能會在您的最終用戶代碼顯示時出現,用戶輸入一個非常大的'b':你的程序可能會溢出堆棧,或者花費太長的時間來產生結果,這取決於優化器的設置。你需要閱讀[平方的指數](http://en.wikipedia.org/wiki/Exponentiation_by_squaring)來解決這個問題。 – dasblinkenlight

+0

如果可能,您應該調整編譯器首選項(或*首選項*),以便在可能的情況下警告類型和格式說明符之間的不匹配。 –

回答

1
int buffer; 
printf("%f",buffer); 

您使用printf中錯誤的說明符,這是一個嚴重的問題,因爲printf不能轉換參數。使用%d或將buffer更改爲雙精度型。


至於第二個問題,你還需要使用%lf,而不是%fscanf,因爲adouble,而不是一個float

+0

謝謝你!但不能使用%d,但必須使用%lf – latenightcode

0
scanf("%f",&a); 

您需要通過%lf讀你的兩倍。請參閱this question爲什麼您需要%lfscanf,但不是printf

0

的事情是,你的系統上,int似乎是相同的長度爲float但不作爲double - 當你的scanf()的這雙,你失去一半(順便說一句,喂格式錯誤scanf的說明符是未定義的行爲)。你必須使用%lf作爲雙打。

0

您應該使用%lf雙倍於scanf請參閱this問題。
代替的:

scanf("%f",&a); 

使用這樣的:

scanf("%lf",&a); 

另外,在主功能緩衝器的類型應該是不doubleint