答:printf的%f说明符的确既可以输出float型又可以输出double型。 根据"默认参数提升"规则(在printf这样的函数的可变参数列表中 ,不论作用域内有没有原型,都适用这一规则)float型会被提升为double型。因此printf()只会看到双精度数。 对于scanf,情况就完全不同了,它接受指针,这里没有类似的类型提升。(通过指针)向f...
float和double是两种不同的浮点数类型。float是单精度浮点数,double是双精度浮点数,通常占用更多的内存空间,即double比float多4个字节。%f用于格式化float类型数据的输入和输出,而%lf表示long float,通常对应于double类型。当使用scanf读取float类型数据时,系统按照4字节的长度读取数据,并存储在一个float...
double精度更高,是指它存储的小数位数更多,但是输出默认都是6位小数,如果你想输出更多小数,可以自己控制,比如 “%.10lf” 就输出10位小数,望采纳
printf("%f,%d\n", a, b);输出结果:0.0,5 结论:float类型只占4个字节的数据,但前面实验一已经证明%f会读8个字节,即double类型的宽度,所以,编译器在将float类型参数入栈的时候,事先转换成了double类型。实验四,再次证明实验三的结论 float a=0.0f;int b=5;printf("%d,%d,%d\n",...
可以用%lf 应该说double类型的数据用%lf scanf当中若是对双精度的变量赋值是必须是%后跟lf,而printf当中可以用%f也可以用%lf没有限制
<p>double 和float 对应的%lf和%f 为什么在printf函数输出后都是六位小数,double不是精度更高吗,不是应该有更多小数吗,如果不是的话为什么不直接用%f 而要用%lf.输出结果上没有什么区别。</p><pre class="brush:cpp;toolbar:false">#include <stdio.h> int main() {
``参数默认晋级" 规则适用于在可变参数中的可变动部分: char 和 short int 晋级到 int, float 晋级到 double。同样的晋级也适用于在作用域中没有原型说明的函数调用, 即所谓的 ``旧风格" 函数调用, 所以 printf 的 %f 格式总是得到 double。类似的, %c 总是得到 int, %hd 也是。
肯定不一样了,%d是整型,而%f是浮点型的,假如一个数字是5,前面会输出5,后面会是5.0
因为float和double可以直接转换,所以可以统一成其中一个。但是float*和double*不能,就算借助(void*)那...
看看这里:c-faq.com / stdio / scanfvsprintf.html 建议就是:scanf()对double用lf,printf()对double只用f。具体上面的说明,英文的,仔细看看。不要听别人乱讲。