double型printf(%f)可以正常输出,scanf必须使用%lf

今天编写程序发现一个问题,double型使用printf("%f")和printf("%lf")都可以正常输出,而scanf必须使用%lf。
#include <stdio.h>
#include <stdlib.h>
#define PI 3.1415926
int main( )
{
    double r, h, S;
    printf("输入半径:");
    scanf("%f", &r);
    printf("输入高度:");
    scanf("%f", &h);
    S = 2 * PI * r * r + 2 * PI* r * h;
    printf("圆柱体的表面积为:%f\n", S);
    return 0;
}
这里将r,h,s 定义为double类型,scanf使用%f

scanf使用%lf(可以正常计算)

在这里插入图片描述

之后百度总结一下
1. scanf函数和printf函数是不同寻常的函数,因为它们都没有将函数的参数限制。与其他库函数不同的是,printf 函数是一个“可变参数函数”(即函数参数的个数是可变的)。确切地说,是其输出参数的个数是可变的,且每一个输出参数的输出格式都有对应的格式说明符与之对应,同 printf 函数相似,scanf 函数也是一个“可变参数函数”。当调用带可变长度参数列表的函数时,编译器会安排float参数自动转换成为double类型,其结果是printf函数无法区分float型和double型的参数。因此在printf函数调用中%f既可以表示float型又表示double型的参数。
2. scanf函数是通过指针指向变量的。%f告诉scanf函数在所传地址位置上存储一个float型值,而%lf告诉scanf函数在所传地址位置上存储一个double型值。这里float和double的区别是非常重用的。如果给出了错误的转换说明,那么scanf函数将可能存储错误的字节数量。简单来说scanf()是通过指针来读取数据的,区分float和double类型。
  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值