gpt4 book ai didi

c - 为什么转换规范 %lf 不适用于 printf 中的 Double

转载 作者:太空宇宙 更新时间:2023-11-04 05:54:05 25 4
gpt4 key购买 nike

我正在编写一个非常小的代码,只有 scanfprintf。我正在阅读一个双重值(value)并打印它。转换规范 %lf 可以正常读取 double 值。但是,它不适用于 printf。

当我尝试打印该值时,我得到的输出类似于 0.000000

double fag;
scanf("%lf", &fag);
printf("%lf", fag);

但是,如果我在 printf 中使用 %f 它会正常工作。

最佳答案

您使用的 C 标准库实现不符合 C99(或更新版本)。前言(第 5 段)中列出的更改包括:

%lf conversion specifier allowed in printf

l 长度修饰符的描述是(C99+TC3 7.19.6.1 par. 7,强调我的):

Specifies that a following d, i, o, u, x, or X conversion specifier applies to a long int or unsigned long int argument; that a following n conversion specifier applies to a pointer to a long int argument; that a following c conversion specifier applies to a wint_t argument; that a following s conversion specifier applies to a pointer to a wchar_t argument; or has no effect on a following a, A, e, E, f, F, g, or G conversion specifier.

%f%lf 因此是等价的。两者都期望 double 因为参数匹配省略号(int printf(char const * restrict, ...); 中的 ...)进行所谓的默认参数提升。其中,它们隐式地将 float 转换为 double。这对 scanf() 无关紧要,因为指针不会被隐式转换。

因此,如果您不能或不想更新到较新的 C 标准库,%f 始终可以用在 printf() 格式字符串中以打印 floatdouble。但是在 scanf() 格式字符串中,%f 需要 float*%lf 需要 double*.

关于c - 为什么转换规范 %lf 不适用于 printf 中的 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31600931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com