代码块电源function在c中不起作用

我正在使用代码块来学习c。 我的代码是

#include #include int main() { int x; x = pow(5,2); printf("%d", x); } Output is 25 

当我使用此代码时

 #include #include 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 

这有什么不对? 我只是使用扫描function,并以同样的方式使用powfunction。

我怀疑你的libm有一个天真的pow实现(我得到25,应该是)。 如果计算pow(x,y)exp(y*log(x))为正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。