je mist ergens de 'va_start(arg_lijst, arg_c)' ? en probeer het eens met echte doubles in de 'va_list';
#include <stdio.h>
#include <stdarg.h>
double gemiddelde ( unsigned short arg_c, ... )
{
if ( arg_c > 3 ) return 0;
va_list arg_lijst;
unsigned short a;
double som = 0;
va_start(arg_lijst, arg_c);
while (a < arg_c)
{
fprintf(stderr, "a='%u'\n", a);
fprintf(stderr, "som='%f'\n", som);
som += va_arg ( arg_lijst, double );
a += 1;
}
va_end ( arg_lijst );
return som / ( float ) arg_c;
}
double average(double d, ...) {
va_list va;
double avg;
int num;
avg = 0.0;
va_start(va, d);
avg = (avg + va_arg(va, double)) / ++num;
va_end(va);
return avg;
}
int main ( void )
{
printf ( "%f \n", gemiddelde ( 3, 40,0, 40,0, 40,0 ) );
printf ( "%f \n", gemiddelde ( 3.0, 40.0, 0.0, 40.0, 0.0, 40.0, 0.0 ) );
printf("avg='%f'\n", average(1.0, 2.0, 3.0, 4.0, 5.0, 6.0));
return 0;
}
$ gcc va_list.c -o va_list; ./va_list
a='0'
som='0.000000'
a='1'
som='0.000000'
a='2'
som='0.000000'
0.000000
a='0'
som='0.000000'
a='1'
som='40.000000'
a='2'
som='40.000000'
26.666667
avg='0.000010'