使用double调用函数后,将删除所有小数

时间:2018-08-02 20:13:11

标签: c function printf double

printf正在删除我的数字的小数位。就我而言,6.96.4都打印为6.0

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


int main()
{
    double Value1_m, Value2_m;
    double maximum, minimum;
    printf("Enter two decimal numbers with an space: ");
    scanf("%lf" "%lf", &Value1_m ,&Value2_m);
    //printf("%3lf", Value1_m);

    maximum = ComputeMaximum(Value1_m, Value2_m);
    minimum = ComputeMinimum(Value1_m, Value2_m);

    printf("ComputeMaximum %.10lf\n", maximum);
    printf("ComputeMinimum %.10lf", minimum);
    return 0;
}

ComputeMaximum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value1 : Value2;

}
ComputeMinimum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value2 : Value1;

}

2 个答案:

答案 0 :(得分:1)

您尚未声明ComputeMaximumComputeMinimum函数的返回类型。这在现代C语言中是错误的,您的编译器至少应警告您。而且,您在没有作用域内声明的位置调用这些函数。这也是错误的。

但是,过去常常是,如果隐式声明没有类型声明的函数以返回int,并且没有范围内声明的函数也被假定为返回int。回到该行为的编译器将接受您的程序,但是这些函数的返回值将被截断为类型int,然后在分配值时将结果转换回double。 / p>

首先,声明函数的期望返回类型。

第二,在调用函数之前先声明它们,方法是将完整的定义放在首位,或者通过提供前向声明:

double ComputMaximum(double, double);
double ComputMinimum(double, double);

// ...

确保任何前向声明均与函数定义一致。

答案 1 :(得分:0)

这里不是Printf的问题,问题在于您的函数本身。

看看这部分

dppd

这些方法中没有返回类型,这意味着编译器不知道最终将返回什么。无论您使用什么,默认情况下都将返回一个int值,正如您所说的那样,这将导致除去小数点后的数字。

因此,从本质上讲,编译器将以此方式读取它,并添加了默认返回类型。

ComputeMaximum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value1 : Value2;

}
ComputeMinimum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value2 : Value1;

}

您需要为这些方法显式添加一个返回类型,因此默认值不会起作用。

int ComputeMaximum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value1 : Value2;

}
int ComputeMinimum(double Value1, double Value2)
{

    return  (Value1 > Value2) ? Value2 : Value1;

}