C语言中关于float与double的问题!

见程序#include<stdio.h>intmain(void){inti,x;doubler,p,ca,sa,v;scanf("%f",&r);//输入半径for(i... 见程序
#include<stdio.h>
int main(void)
{
int i,x;
double r,p,ca,sa,v;
scanf("%f",&r);//输入半径
for(i=0;i<10000;i++)
{
printf("Choose an option:\n1 computer and display the circle perimeter.----------\n");
scanf("%d",&x);
if(x==0)
break;
switch(x){
case 1:p=2*r*3.14;printf("%f\n",p);break;//算 圆的周长
case 2:ca=3.14*r*r;printf("%lf\n",ca);break;//算圆的面积
case 3:sa=4*3.14*r*r;printf("%lf\n",sa);break;//算球的面积
case 4:v=4/3*3.14*r*r*r;printf("%lf\n",v);break;//算球的体积
}

}
}
当把里面的变量定义为double时,结果全是0,把double改为float就有了正确的结果。。
这是为什么?双精度的double不行反而单精度的float行。希望大神给个答案。
展开
 我来答
zhouxc992
推荐于2016-04-11 · TA获得超过226个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:166万
展开全部
因为格式化输入scanf要求数据类型和输入格式对应,你只要把scanf里面的%f改为%lf,double不用改,就正常了。
还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
杜爷1号
2015-06-28 · 知道合伙人软件行家
杜爷1号
知道合伙人软件行家
采纳数:4973 获赞数:9185
毕业于福建农林大学,本科学士学位。从事IT行业3年,曾参与过多个大型项目的需求调研、软件研发。

向TA提问 私信TA
展开全部
//
//  main.m
//  Double与Float
//
//  Created by dushengduan on 15/6/28.
//  Copyright (c) 2015年 dushengduan. All rights reserved.
//

#include<stdio.h>
int main(void)
{
    int i,x;
    double r,p,ca,sa,v;
    //你输入的时候,接受的就是float,改成double的输入就好啦
    //scanf("%f",&r);
    scanf("%lf",&r);//输入半径
    for(i=0;i<10000;i++)
    {
        printf("Choose an option:\n1 computer and display the circle perimeter.----------\n");
        scanf("%d",&x);
        if(x==0)
            break;
        switch(x){
            case 1:p=2*r*3.14;printf("%f\n",p);break;//算 圆的周长
            case 2:ca=3.14*r*r;printf("%lf\n",ca);break;//算圆的面积
            case 3:sa=4*3.14*r*r;printf("%lf\n",sa);break;//算球的面积
            case 4:v=4/3*3.14*r*r*r;printf("%lf\n",v);break;//算球的体积 
        } 
        
    }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xoaxa
2015-06-28 · TA获得超过8607个赞
知道大有可为答主
回答量:6415
采纳率:72%
帮助的人:3388万
展开全部
scanf("%f",&r);//输入半径 // 读入double类型变量的值应该用%lf,%f用于float类型。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shine1991
科技发烧友

2015-06-28 · 智能家居/数码/手机/智能家电产品都懂点
知道顶级答主
回答量:4.7万
采纳率:82%
帮助的人:2.3亿
展开全部
scanf("%lf",&r);//double对应%lf,在scanf中尤其注意
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式