簡體   English   中英

代碼塊電源功能在c中不起作用

[英]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

這是怎么了 我只是使用掃描功能並以相同的方式使用電源功能來獲取價值。

我懷疑您的libmpow的天真實現(我應該得到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輸入了無效的輸入,並且ij未被初始化,而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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM