c - 关于 C 中的转换说明符

标签 c format-specifiers

我对 C 中的转换说明符有疑问。

在第 5 句中,如果我使用 %lf%Lf 而不是 %f,则不会发生错误。但是为什么使用%f会出错呢?

#include <stdio.h>

int main(void)
{
    long double num;
    printf("value: ");
    scanf("%f",&num);  // If I use %lf or %Lf instead of %f, no error occurs. 
    printf("value: %f \n",num);
}

最佳答案

%f 用于读取 float,而不是 doublelong double .

%lf 用于读取 double

%Lf 用于读取 long double

如果您的程序在变量类型为long double 时使用%lf,那只是巧合。它起作用可能是因为 sizeof(double) 与您平台上的 sizeof(long double) 相同。理论上,这是未定义的行为。

关于c - 关于 C 中的转换说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38427832/

相关文章:

C - Execvp + shell

c - GLib 在 XCode 中的使用

c - 为什么以下按位运算会返回意外结果?

c - Scanf 函数在查找 %d 匹配项时是否忽略 Enter 键?

c - 程序不工作

c - 格式说明符如何知道要打印多少字节?

c - 格式说明符的类型 channel

使用 openssl 中间证书连接到 AWS MQTT 代理

c - 包含一个 Makefile,就好像我在另一个目录中一样?

c++ - C/C++ 中的 (nil) 指针