鱼C论坛

 找回密码
 立即注册
查看: 2589|回复: 6

为什么将float改成double结果会出错

[复制链接]
发表于 2014-8-30 18:23:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x


#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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-30 18:51:35 | 显示全部楼层
你f改lf没??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-30 21:59:45 | 显示全部楼层
主函数中的power(flout x,flout y)形参中的x和y不能使用,需要使用其它自定义的字母,避免和下面函数中的形参混淆,你可以试一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-8-31 08:01:35 | 显示全部楼层
谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-31 11:13:59 | 显示全部楼层
绝对支持……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-8-31 19:51:48 | 显示全部楼层

你定义的变量c是float型,函数的返回值是double 型,需要强制类型转换,c=(float)pow(a,b)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-9-4 23:36:22 | 显示全部楼层
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, 用于输出长双精度数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 23:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表