这个C程序有什么问题?
我只想给一个变量赋值,我用了这个这个C程序有什么问题?,c,pow,C,Pow,我只想给一个变量赋值,我用了这个 #include<stdio.h> #include<math.h> int main( void ) { int x; int y; int z; x=10; y=2; z = pow(x,y); printf ("%d" , &z); return 0; } 我不知道如何将它赋给变量pow返回double,它接受类型为double的参数 double pow(double x, double y) 您需要在pri
#include<stdio.h>
#include<math.h>
int main( void )
{
int x;
int y;
int z;
x=10;
y=2;
z = pow(x,y);
printf ("%d" , &z);
return 0;
}
我不知道如何将它赋给变量
pow
返回double
,它接受类型为double
的参数
double pow(double x, double y)
您需要在printf
中使用%f
说明符,并从z
中删除&
另一种方法是将pow
的返回值强制转换为int
并使用%d
int z = (int)pow(x, y);
printf ("%d" , z);
打印z
(*)的地址,而不是其值<代码>打印F(“%d”,z)打印值
(*)实际上,行为是未定义的,在64位CPU上,它可能会打印地址的一半。
&z
是变量z
的地址。如果要打印出z
的值,则只需
printf("%d", z);
在将值读入z
时,您会使用&z
,因为scanf
需要一个指针来修改变量。pow返回一个双精度(而不是引用),您需要生成打印语句:
printf ("%f" , z);
将z更改为双精度后:
double z;
打开编译器警告。为什么要打印出
&z
?谢谢大家我们解决了这个问题,这是我的noob错误,我是新来的,在pascal中我不需要-,我想我总是需要它,再次感谢大家int
可以转换成99或100。@chris;这是什么意思?@alk;我知道。对克里斯说:)@alk;您可以在printf
中使用任何一个。我的意思是,当OP将int
传递到pow
时,它将转换为双精度
。当OP将返回的double
存储到int
中时,它也会被转换回来,因此z
将是99或100中的一个,因为浮点不准确。由于OP的z
是int
,printf
需要告知它是int
,或者z
的类型需要更改(这可能更好,以免随机打印99)。谢谢!在那些初学者教程中,每个人都会用到&我想这是一个很好的例子obligatory@Luka,对于scanf
可能是因为C是传递值,因此scanf
无法读取变量。您仍然需要将printf更改为%f或%lf@alk但是pow并没有定义为返回一个int,只返回double。因此,除非您打算进行隐式转换,否则您需要在printf中将z更改为双精度和%f。@Jack;我百分之百同意你的意见。这就是我的答案。%f
代表浮动
,而不是双重
@chris;是,它适用于printf
中的double
。如果是scanf
的话,你需要%lf
来做双人。@Jack,哎呀,我的错了。我想到的是scanf。它在printf
中没有意义,因为它是作为double
传入的。
printf ("%f" , z);
double z;