在c中有n个参数,函数返回int而不是double

在c中有n个参数,函数返回int而不是double,c,arguments,return-value,C,Arguments,Return Value,这个程序是关于寻找n个参数的平均值。它与int类型完美结合,但在使用double时给出0.0。问题在哪里 #include <stdio.h> #include <stdarg.h> double average(int,...); double average(int n, ...) { double s = 0.0; va_list argumenti; va_start(argumenti, n); for (int i = 0; i <

这个程序是关于寻找n个参数的平均值。它与int类型完美结合,但在使用double时给出0.0。问题在哪里

#include <stdio.h>
#include <stdarg.h>
double average(int,...);

double average(int n, ...)
{
  double s = 0.0;
  va_list argumenti;

  va_start(argumenti, n);
  for (int i = 0; i < n; i++)
    s += va_arg(argumenti, double);
  va_end(argumenti);

  return n ? s / n : 0.0;
}

int main()
{
  printf("average(10.0, 20.0) = %.2lf\n", average(2, 10.0, 20.0));
  printf("average(2.0, 3.5, 4.2) = %.2lf\n", average(3, 2.0, 3.5, 4.2));
  return 0;
}
#包括
#包括
双平均(整数,…);
双平均值(整数n,…)
{
双s=0.0;
va_列表i;
va_开始(i,n);
对于(int i=0;i
对我来说,它是有效的,而且在我看来是正确的。使用
lf
而不是
f
作为
printf
中的
double
在C89中未定义(但在C99和C11中定义),我记得这里有一个问题,这会导致问题。您可能想使用
返回n>0?序号:0.0什么不起作用
f
而不是
lf
或Force-Bru建议的更改条件(这对显示的代码没有影响)?您正在工作,谢谢,评论是针对Force-Bru的,抱歉@АаааааааСааПаааааааааа。你的问题现在解决了吗?在这种情况下,我可以写一个答案(我会对您使用的操作系统和C库感兴趣),或者您可能想删除这个问题(正如我所说的,我们以前有过这个问题,但您的问题可能会帮助有类似问题的人)。