基本的,关于说明者

时间:2017-08-20 13:56:32

标签: c

#include<stdio.h>

int main(){
  double n1,n2;
  float n3;
  printf("input 2 flt:");
  scanf("%lf %lf",&n1,&n2);
  n3 = n1 * n2;
  printf("n1 * n2 = %.2lf",n3);
}

当我设置n1,n2为浮点数时,n3无法正确计算,为什么?

最初来自a online tutorial的代码,经过修改以测试%lf的功能。

3 个答案:

答案 0 :(得分:2)

因为您需要使用正确的scanf()说明符。

如果您使用float,则"%f""%lf"使用double

对于float,您可以这样做

#include<stdio.h>

int main()
{
    float n1, n2;
    float n3;

    printf("input 2 flt:");
    if (scanf("%f%f", &n1, &n2) == 2) {
        n3 = n1 * n2;
        printf("n1 * n2 = %.2f",n3);
    }
}

适用于double

#include<stdio.h>

int main()
{
    double n1, n2;
    double n3;

    printf("input 2 flt:");
    if (scanf("%lf%lf", &n1, &n2) == 2) {
        n3 = n1 * n2;
        printf("n1 * n2 = %.2f",n3);
    }
}

请注意,我在使用scanf()2的值之前检查了n1返回n2,因为如果您不检查由于n1和/或n2未初始化,程序可能会调用未定义的行为。

您的printf()说明符也是错误的,对于floatdouble ,您可以使用 "%f",请阅读文档。

答案 1 :(得分:1)

您必须使用%f

#include  <stdio.h>
int main(){
float n1,n2;
float n3;
printf("input 2 flt:");
scanf("%f %f",&n1,&n2);
n3 = n1 * n2;
printf("n1 * n2 = %.2f",n3);
}

答案 2 :(得分:0)

从其他答案中,我了解到%f %lf事物被称为格式说明符。

f lf适用于不同的数据类型。 f用于浮动lf用于双重

此网站列出了所有spes

我检查了c11标准,发现l之前的f被称为长度修饰符。