【问题标题】:Float, Double data types confusion in external functions (C) [duplicate]外部函数中的浮点数、双精度数据类型混淆(C)[重复]
【发布时间】:2018-08-22 14:17:51
【问题描述】:

下面的代码编译好了:

#include <stdio.h>

double add(double summand1, double summand2)
{
    double sum;
    sum = summand1+summand2;
    return sum;
}

double subtract(double minuend, double subtrahend)
{
    double diff;
    diff = minuend-subtrahend;
    return diff;
}

int main()
{
    double a,b,c,d;
    printf("Enter Operand 1:\n");
    scanf("%d",&a);
    printf("Enter Operand 2:\n");
    scanf("%d",&b);
    // Add
    c = add(a,b);

    // Subtract
    d = subtract(a,b);

    printf("Sum: %.3f\n", c);
    printf("Difference: %.3f\n", d);

    return 0;
}

但是,当输入 55 时,结果是 0.000(错误)和 0.000(预期)。 当输入一个十进制数(例如2.5)时,会完全跳过第二个提示,并为sumdifference 打印两个随机数。 问题一定是数据类型 double 和 float,我似乎使用不正确。

【问题讨论】:

标签: c double


【解决方案1】:

在您的scanf()中,您使用了用于整数的格式说明符%d。当您将整个变量声明为双精度时,请改用 %lf (浮点)。我尝试了代码并使用正确的说明符,代码有效。

【讨论】:

  • @TimRandall 看到这个,关于格式说明符:codeforwin.org/2015/05/… 这是我一直在使用的表格。
  • 嗯。我想我在考虑 printf
  • @TimRandall 请删除您的第一条评论,因为它是错误的,可能会使一些读者感到困惑。谢谢
  • scanf() 详细信息:"%d" 匹配 int * 不是 int"%f" 匹配 float *"%lf" 匹配 double *
猜你喜欢
  • 1970-01-01
  • 2015-02-20
  • 2011-10-24
  • 2015-10-22
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-19
  • 2022-01-20
相关资源
最近更新 更多