正确的双打印格式说明符

正确的双打印格式说明符

正确的格式说明符是什么?double打印出来的?是吗%f或者是%lf?我相信这是.%f但我不确定。

代码样本

#include <stdio.h>int main(){
   double d = 1.4;
   printf("%lf", d); // Is this wrong?}


幕布斯6054654
浏览 368回答 3
3回答

慕雪6442864

"%f"是(或至少一种)正确的双倍格式。那里是没有格式的float,因为如果您试图传递float到printf,它将被提升为double以前printf收到它1.&nbsp;"%lf"在现行标准下也是可以接受的-l如果后面跟着f转换说明符(除其他外)。请注意,这是一个地方,printf格式字符串与scanf(和fscanf等等)格式化字符串。为了输出,您将传递一个价值,将从float到double当作为变量参数传递时。对于输入,您将传递一个指针,没有晋升,所以你必须告诉scanf不管你是否想读float或者是double所以scanf,&nbsp;%f意味着你想读一个float和%lf意味着你想读一个double(不管它值多少钱,对于一个long double,你用%Lf任一种printf或scanf).1.C99,§6.5.2.2/6:“如果表示被调用函数的表达式的类型不包括原型,则对每个参数执行整数提升,并将具有浮动类型的参数提升为双倍。这称为默认参数提升。”在C+中,措辞有些不同(例如,它没有使用“Prototype”一词),但效果是一样的:所有变量参数在被函数接收之前都会经历默认的升级。

MMTTMM

鉴于C99标准(即N 1256),规则取决于函数类型:fprintf(printf,sprintf,.)或者扫描。以下是提取的相关部分:前言第二版取消并取代第一版ISO/IEC 9899:1990,经ISO/IEC 9899/COR1:1994、ISO/IEC 9899/AMD 1:1995和ISO/IEC 9899/COR2:1996修订和更正。与上一版相比的主要变化包括:%lf允许转换说明符printf7.19.6.1fprintf功能7长度修饰语及其含义如下:l(Ell)指定(.)对下列a,A,e,E,f,F,g或G转换说明符没有影响。L指定以下a、A、e、E、f、F、g或G转换说明符适用于长双参数。指定的相同规则fprintf申请printf, sprintf以及类似的功能。7.19.6.2fscanf功能11长度修饰语及其含义如下:l(Ell)指定(.)以下a,A,e,E,f,F,g或G转换说明符适用于类型指针为Double的参数;L指定以下a、A、e、E、f、F、g或G转换说明符应用于类型指针为Long Double的参数。12转换说明符及其含义是:a,e,f,g匹配可选符号浮点数,(.)14转换说明符A、E、F、G和X也是有效的,其行为分别与a、e、f、g和x相同。长话短说fprintf指定了下列说明符和相应类型:%f->双倍%Lf->长双人间而为了fscanf它是:%f->浮动%lf->双倍%Lf->长双人间

蛊毒传说

可能是%f, %g或%e取决于您希望对数字进行格式化的方式。这个l修饰符在scanf带着double,但不是在printf.
打开App,查看更多内容
随时随地看视频慕课网APP