为啥 main() 函数不返回浮点值?
Posted
技术标签:
【中文标题】为啥 main() 函数不返回浮点值?【英文标题】:Why doesn't main() function return float value?为什么 main() 函数不返回浮点值? 【发布时间】:2018-03-02 07:31:47 【问题描述】:我正在用 C 语言编写一个程序,它应该在函数 averagerOfFiveFloats()
被调用后返回浮点值 3.2058
。问题是当代码编译并且IDE打开可执行文件时,返回的值是1067450368
。为什么会出现这种情况?我确保变量类型是正确的,并且两个函数都有一个浮点返回类型。
程序在主函数中获取五个浮点值,然后在主函数中调用函数averagerOfFiveFloats()
函数。函数averagerOfFiveFloats()
将五个浮点值相加,然后将总数除以 5,然后返回该值。
这是我的代码:
#include <stdio.h>
float a, b, c, d, e;
float averagerOfFiveFloats(float num1, float num2, float num3, float num4,
float num5);
float main (void)
a = 1.25;
b = 4.45;
c = 3.45;
d = 1.11;
e = 5.769;
return averagerOfFiveFloats(a, b, c, d, e);
float averagerOfFiveFloats(float num1, float num2, float num3, float num4,
float num5)
float addition = 0;
addition = num1 + num2 + num3 + num4 + num5;
float divider = 0;
divider = addition / 5;
return divider;
【问题讨论】:
main
的返回类型为int
。
【参考方案1】:
这是正确的代码!你不能在 main 中返回一个浮点数:)
我还更改了更容易阅读/理解的语法:)
#include <stdio.h>
float averagerOfFiveFloats(float num1, float num2, float num3, float num4,
float num5)
float addition = 0;
float divider = 0;
addition = num1 + num2 + num3 + num4 + num5;
divider = addition / 5;
return divider;
int main (void)
float a = 1.25;
float b = 4.45;
float c = 3.45;
float d = 1.11;
float e = 5.769;
float divider = averagerOfFiveFloats(a, b, c, d, e);
printf("divider = %f\n", divider);
return (0);
【讨论】:
【参考方案2】:main
必须返回 int
而不是浮点数。您可能会在编译时收到警告。警告通常是 C 语言中的错误,因此您应该努力编写无警告代码。
因此,您看到的是您的float
被静默转换为int
。如果你这样做printf("%f", averageOfFive(a, b, c, d, e))
你会看到你期望的输出。
【讨论】:
【参考方案3】:您的代码的问题是您试图从main
返回float
。
函数 main 只能返回一个int
。
相反,您可以将结果打印为
printf("%f", averagerOfFiveFloats(a, b, c, d, e));
这会产生正确的结果。
此外,您的数字的实际平均值不可能是 16.029
,因为所有数字都小于该数字。
【讨论】:
以上是关于为啥 main() 函数不返回浮点值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 roundf() 不对浮点值进行舍入,为啥 int - float 数学运算返回错误值?