C错误的总和结果与双打

Fav*_*las 5 c printf

在这里.

我正在学习C,我有这个代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    double buyval, deliveredval, change;

    printf("What's the buy value? ");
    scanf("%lf", &buyval);

    do{
        printf("What's the value delivered? ");
        scanf("%lf", &deliveredval);

        if (deliveredval < buyval){
            printf("Delivered value must be greater then buy value \n\n");
        }
    } while (deliveredval < buyval);

    change = deliveredval - buyval;

    printf("Change is %4.2lf", change);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,最后一次打印始终为0.00但是我更改了

printf("Change is %4.2lf", change);
Run Code Online (Sandbox Code Playgroud)

printf("Change is %4.2f", change);
Run Code Online (Sandbox Code Playgroud)

它按预期工作.这是为什么?双打未格式化为lf?

pmg*_*pmg 5

"%f"用于doubles(以及自动float转换为s的s double); %Lf是为了long doubles.您可以阅读C99标准(或PDF)printf中的所有说明符.

l格式说明"%lf"没有效果:"%lf"(相同"%f")是打印double秒.

您的结果应与任何理智的C99编译器/实现相同.

根据我的文件,在C89中,"%lf"格式说明符无效; 如果您使用的是C89编译器/实现,则使用它是未定义的行为.


请注意,规则scanf有点不同.