Szervusztok
> Olyan fuggvenyre van szuksegem, amelyet valtozo parameterekkel lehet
> meghivni (mint pl. a "printf"-et). Azt mar tudom, hogy ehhez a
> "va_list" es a "va_arg" szukseges az stdarg.h-bol - de nem tudtam
> kideriteni, hogyan kell ezeket hasznalni.
Engem nem igazan nyert meg, mert gyerekesen gyengenek talaltam.
Amolyan jo C stilusban elmegy a memoriaban es nincs ami megallitsa.
Ugy ertem nincs semmi ami jelezne az argumentum lista veget, a
programozo maga kell gondoskodjon valamirol.
A lenti peldaban ket lehetseges modszer hasznalatat vazoltam :
- egy kulonleges jeletesu ertek jelzi a lista veget ( atlag1() )
- kulon parameterben meg van adva a lista hossza ( atlag2 () )
#include<stdarg.h>
void atlag1(char* nev,...)
{
int darab=0,ossz=0,egy;
va_list lista;
va_start(lista,nev);
while (egy=va_arg(lista,int)) {
darab++;
ossz+=egy;
}
printf("%s ( 1. modszer ) : %d / %d = %d\n",nev,ossz,darab,ossz/darab);
va_end(lista);
}
void atlag2(char* nev,int darab,...)
{
int ossz=0,i;
va_list lista;
va_start(lista,darab);
for (i=0;i<darab;i++) ossz+=va_arg(lista,int);
va_end(lista);
printf("%s ( 2. modszer ) : %d / %d = %d\n",nev,ossz,darab,ossz/darab);
}
void main(void)
{
atlag1("Moricka",1,2,3,4,5,0);
atlag1("Pistike",2,1,2,2,2,3,2,4,2,5,0);
atlag2("Moricka",5,1,2,3,4,5);
atlag2("Pistike",10,2,1,2,2,2,3,2,4,2,5);
}
Telsztelve Turbo C 2.0 .
Feherke.
http://script.fplanet.hu
|