Din*_*rma 0 c format-specifiers
我只是写一个非常小的代码scanf和printf。我正在读取一个双精度值并将其打印出来。转换规范%lf可以正常工作以读取双精度值。但是,它不适用于printf。
当我尝试打印该值时,我得到的输出像 0.000000
double fag;
scanf("%lf", &fag);
printf("%lf", fag);
Run Code Online (Sandbox Code Playgroud)
但是,如果我在printf中使用%f,它可以正常工作。
您使用的C标准库实现不符合C99(或更高版本)。前言(第5段)中列出的更改包括:
%lf允许使用转换说明符printf
l长度修饰符的描述为(C99 + TC3 7.19.6.1参数7,重点是):
用于指定后续的
d,i,o,u,x,或X转换说明适用于一个long int或unsigned long int参数; 以下n转换说明符适用于指向的指针long int argument;以下c转换说明符适用于一个wint_t参数;以下s转换说明符适用于指向wchar_t参数的指针;或具有在以下没有影响a,A,e,E,f,F,g,或G转换说明。
%f和%lf因此等效。两者都期望double因为与省略号(...in int printf(char const * restrict, ...);)匹配的参数会经历所谓的默认参数提升。除其他外,它们隐式转换float为double。没关系,scanf()因为不会隐式转换指针。
因此,如果您不能或不希望更新到较新的C标准库,则%f可以始终使用printf()格式字符串来打印float或double。但是在scanf()格式字符串中,%fexpects float*和%lfexpected double*。
| 归档时间: |
|
| 查看次数: |
1205 次 |
| 最近记录: |