为什么将float改成double结果会出错
#include <stdio.h>
void main()
{
double power(float x,float y);
float a,b,c; /*为什么将float改成double结果会出错*/
scanf("%f,%f",&a,&b);
c=power(a,b);
printf("result is %f\n",c);
}
double power(float x,float y)
{
float z=1;
int i;
for(i=0;i<y;i++)
{
z*=x;
}
return z;
} 你f改lf没?? 主函数中的power(flout x,flout y)形参中的x和y不能使用,需要使用其它自定义的字母,避免和下面函数中的形参混淆,你可以试一下。 谢谢 绝对支持…… ゃ莼处狼性ぉ 发表于 2014-8-31 11:13
绝对支持……
你定义的变量c是float型,函数的返回值是double 型,需要强制类型转换,c=(float)pow(a,b) a由float类型改为double类型后,其所占字节数由4字节(float类型)变为8字节(double类型),在用scanf()函数进行输入时,如果用%f控制输入,则只能输入4个字节的内容,另外4个字节的内容是随机的,这两个4字节一起构成double类型的8个字节,所以输入本身就不正确, double类型只能用 %lf控制输入
这个你可以逐过程调试一下,发现你输入的数据本身不正确,与你所调用的函数无关
再补充一下:
在你必须知道的495个C语言问题 一书中:
12.7 有人告诉我在printf中使用%lf 不正确。那么,如果scanf() 需要
%lf, 怎么可以用在printf() 中用%f 输出双精度数呢?
printf的%f 标识符的确既可以输出浮点数又可以输出双精度数。根据 “缺
省参数扩展” 规则,不论范围内有没有原形都会在在类似printf的可变长度参
数列表中采用,浮点型的变量或扩展为双精度型,因此printf() 只会看到双精度
数。printf() 的确接受%Lf, 用于输出长双精度数。
页:
[1]