C++ 代码块幂函数在c中不起作用

C++ 代码块幂函数在c中不起作用,c++,c,codeblocks,C++,C,Codeblocks,我正在使用代码块学习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

我正在使用代码块学习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函数以同样的方式取值。

在我的windows x64上,您的代码正确地给出了25

你可能需要再运行一次,看看你是不是看错了。。。 缺少的返回值为0;这不是问题所在

如果,任何事情都可能出错, 您可以尝试添加

fflush(stdin);//or out
经过很长时间的扫描和打印。
如果任何刷新解决了您的问题,您就知道出了什么问题。

在我的windows x64上,您的代码正确地给出了25

你可能需要再运行一次,看看你是不是看错了。。。 缺少的返回值为0;这不是问题所在

如果,任何事情都可能出错, 您可以尝试添加

fflush(stdin);//or out
经过很长时间的扫描和打印。
如果任何刷新解决了您的问题,您就知道出了什么问题。

第二个程序似乎没有什么问题,只是您必须在最后添加

return 0;

如果用2读取值j,则结果仅为25。

第二个程序似乎没有问题,只是必须在末尾添加

return 0;

如果用2读取值j,则结果仅为25。

尝试将初始化更改为:

int x=-1 ,i=-1 ,j=-1;
最后打印到:

printf("pow(%d, %d) == %d\n", i, j, x);
这应该能很好地说明这个问题。此外,检查scanf的返回值,它们应该返回读取的项目数,即1,上面有代码

几乎可以肯定的是,您为scanf输入了无效的输入,i或j没有初始化,24只是垃圾值


此外,在启用警告的情况下编译,并修复它们,如添加并返回0;将初始化更改为以下内容:

int x=-1 ,i=-1 ,j=-1;
最后打印到:

printf("pow(%d, %d) == %d\n", i, j, x);
这应该能很好地说明这个问题。此外,检查scanf的返回值,它们应该返回读取的项目数,即1,上面有代码

几乎可以肯定的是,您为scanf输入了无效的输入,i或j没有初始化,24只是垃圾值


此外,在启用警告的情况下编译,并修复它们,如添加并返回0;到main的末尾。

我怀疑您的libm中有一个简单的pow实现,我得到了25,这是应该的。如果这计算出powx,y为正x的expy*logx,而不检查小的积分指数并对它们进行特殊处理,那么

Prelude> 2 * log 5
3.2188758248682006
Prelude> exp it
24.999999999999996
一个略小于25的双精度结果,因此当它转换为int时,它被截断为24

要进行检查,请将powi,j的结果指定给double并打印出来


对于硬编码的pow5,2,编译器很可能就是gcc所做的,即使没有优化,也会精确地计算编译期间的结果。

我怀疑您的libm中有一个简单的pow实现,我得到了25,这是应该的。如果这计算出powx,y为正x的expy*logx,而不检查小的积分指数并对它们进行特殊处理,那么

Prelude> 2 * log 5
3.2188758248682006
Prelude> exp it
24.999999999999996
一个略小于25的双精度结果,因此当它转换为int时,它被截断为24

要进行检查,请将powi,j的结果指定给double并打印出来


对于硬编码的pow5,2,编译器很可能就是gcc所做的,即使没有优化,也会在编译过程中精确计算结果。

使用您的代码,我得到了正确的结果25。
尽管尝试更改结果的数据类型,如float或double。

使用您的代码,我得到了正确的结果25。
尽管尝试更改结果的数据类型,如float或double。

对我来说很有用,但您应该在主要方法的末尾返回0。请看一下-pow的原型是double-pow-double x,double y;。开始使用适当的类型。你应该在C或C++之间选择,而不是两者。否则你会得到一些令人困惑的评论和答案,比如你忘记返回0,这不适用于C++。就目前情况而言,这是一个C问题。@JUnitx因为无论你在它前面使用什么类型,pow最初都会返回一个双精度->int转换只是截断,OP平台中的一些奇怪之处可能会导致5^2是24.99999,而int是24。考虑到printf、scanf和.h文件的使用,我会说这是C,不是C++。我工作,但是你应该返回0在你的主要方法的结尾。看看-POW的原型是双PuxX,双Y;开始使用适当的类型。你应该在C或C++之间选择,而不是两者。否则你会得到一些令人困惑的评论和答案,比如你忘记返回0,这不适用于C++。就目前情况而言,这是一个C问题。@JUnitx因为无论你在它前面使用什么类型,pow最初都会返回一个双精度->int转换只是截断,OP平台中的一些奇怪之处可能会导致5^2是24.99999,而int是24。考虑到printf、scanf和.h文件的使用,我会说这是C,不是C++,或者学习使用调试器,并在S之后检查变量。
或者学习使用调试器并在扫描后检查变量。