2013-02-24 78 views
1

我正在使用代碼塊學習c。我的代碼是代碼塊電源功能在c中不工作

#include<stdio.h> 
#include<math.h> 
int main() 
{ 
    int x; 
    x = pow(5,2); 
    printf("%d", x); 
} 

Output is 25 

,當我使用此代碼

#include<stdio.h> 
#include<math.h> 
int main() 
{ 
    int x,i,j; 
    printf("please enter first value"); 
    scanf("%d", &i);//5 
    printf("please enter second value");//2 
    scanf("%d", &j); 
    x = pow(i,j); 
    printf("%d", x); 
} 

Output is 24 

這裏有什麼問題?我只是使用掃描功能獲取價值,並以相同的方式使用pow函數。

+3

適用於我,但您應該在主方法結束時返回0 – cIph3r 2013-02-24 10:52:25

+0

查看[手冊頁](http://linux.die.net/man/3/pow) - pow的原型是'double pow(double x,double y);'。從使用適當的類型開始。 – fvu 2013-02-24 10:53:15

+0

@fvu如果他要求整數值,並且他想要一個整數結果,爲什麼類型「不合適」呢? – junix 2013-02-24 10:55:50

回答

1

您的代碼在我的Windows x64上正確給出了25。

您可能需要再次運行它看看你是否只是讀錯了...
缺少「返回0;」這裏不是問題。

如果有的話,都不能出問題,
你可以嘗試後非常的scanf和printf加入

fflush(stdin);//or out 

。 如果有任何沖洗可以解決您的問題,那麼您知道哪裏出了問題。

0

似乎沒有什麼不對的第二個程序,但你必須在最後

return 0; 

如果你讀2 j值,那麼結果將是隻25

2
添加

嘗試改變初始化此:

int x=-1 ,i=-1 ,j=-1; 

而最後打印此:

printf("pow(%d, %d) == %d\n", i, j, x); 

這應該給出有關問題的良好暗示。另外,檢查返回值scanf,它們應該返回讀取的項目數量,即。 1與上面的代碼。

幾乎可以肯定的是,您爲scanf輸入了無效的輸入,並且ij未被初始化,並且該值只是垃圾值。

此外,編譯時啓用警告,並解決它們(例如,添加return 0;結尾main)。

+2

或者學習使用調試器並在掃描後檢查變量。 – KillianDS 2013-02-24 11:01:39

8

我懷疑你的pow在你的libm(我得到25,因爲它應該是)天真的執行。如果計算pow(x,y)exp(y*log(x))x不檢查(小)整體指數和特別對待他們,你會得到

Prelude> 2 * log 5 
3.2188758248682006 
Prelude> exp it 
24.999999999999996 

一個double結果比25略小,因此,當被轉換爲int它被截斷成24.

要檢查,將pow(i,j)的結果分配給double並打印出來。

對於硬編碼pow(5,2),編譯器(很可能是gcc甚至沒有進行優化時會做什麼)精確計算編譯期間的結果。

0

使用你的代碼我得到了結果25,這是正確的。 雖然嘗試更改結果的數據類型,如float或double。