[英]code blocks power function is not working in 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
這是怎么了 我只是使用掃描功能並以相同的方式使用電源功能來獲取價值。
我懷疑您的libm
有pow
的天真實現(我應該得到25,應該如此)。 如果將pow(x,y)
計算為正x
exp(y*log(x))
,而不檢查(小)積分指數並進行特殊處理,則得到
Prelude> 2 * log 5
3.2188758248682006
Prelude> exp it
24.999999999999996
小於25的double
結果,因此當將其轉換為int
時,將其截斷為24。
要進行檢查,請將pow(i,j)
的結果分配給double
並打印出來。
使用硬編碼的pow(5,2)
,編譯器(最有可能的是,即使沒有優化,它也是gcc所做的)精確地計算編譯期間的結果。
嘗試將初始化更改為此:
int x=-1 ,i=-1 ,j=-1;
最后打印到此:
printf("pow(%d, %d) == %d\n", i, j, x);
這應該可以很好地提示問題。 另外,檢查scanf
返回值,它們應該返回讀取的項目數,即。 1,上面的代碼。
幾乎可以肯定,您為scanf輸入了無效的輸入,並且i
或j
未被初始化,而24只是垃圾值。
另外,在啟用警告的情況下進行編譯並進行修復(例如,將return 0;
添加到main
末尾)。
您的代碼在我的Windows x64上正確顯示25。
您可能需要再次運行它,看看您是否讀錯了...
缺少的“返回0”; 這不是問題。
如果有什么可能出錯,
你可以嘗試添加
fflush(stdin);//or out
在非常scanf和printf之后。 如果有任何沖洗可以解決您的問題,那么您知道出了什么問題。
似乎第二個程序沒有什么問題,除了必須在末尾添加
return 0;
如果用2讀取值j,則結果將僅為25。
使用您的代碼,我得到了正確的結果25。 盡管嘗試更改結果的數據類型,例如float或double。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.