为啥 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 数学运算返回错误值?

main 函数不返回任何内容。为啥? [复制]

main函数

为啥main里的init函数没有执行

为啥 main 的默认返回值为 0 而不是 EXIT_SUCCESS?

我如何从c ++中的函数返回多个值[重复]