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

见程序
#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行。希望大神给个答案。

第1个回答  推荐于2016-04-11
因为格式化输入scanf要求数据类型和输入格式对应,你只要把scanf里面的%f改为%lf,double不用改,就正常了。
还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。本回答被提问者采纳
第2个回答  2015-06-28
//
//  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;//算球的体积 
        } 
        
    }
}

第3个回答  2015-06-28
scanf("%f",&r);//输入半径 // 读入double类型变量的值应该用%lf,%f用于float类型。

本回答被网友采纳
第4个回答  2015-06-28
scanf("%lf",&r);//double对应%lf,在scanf中尤其注意

相似回答