printf
正在删除我的数字的小数位。就我而言,6.9
和6.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;
}
答案 0 :(得分:1)
您尚未声明ComputeMaximum
和ComputeMinimum
函数的返回类型。这在现代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;
}