Variabelt antal argumenter
I relation til dette spm... http://www.eksperten.dk/spm/544062Jeg har forsøgt at udvidde funktionen, så den kan tage et variabelt antal argumenter. F.eks. kunne jeg bruge
GetInput("Giv mig et tal:", "%d", &tal)
Eller
GetInput("Giv mig to tal:", "%d %d", &tal1, &tal2 )
Jeg er kommet frem til følgende kode.
void GetInput( const char *aPrompt, const char *aFormat, int dummy, ... )
{
va_list args ;
int n = 0 ;
for( int i = 0 ; i < strlen( aFormat ) ; i++ ) if( aFormat[i] == '%' ) n++ ;
va_start( args, dummy ) ;
while ( 1 )
{
char cBuf[32] ;
printf( "%s", aPrompt ) ;
fflush( stdout ) ;
fgets( cBuf, sizeof( cBuf ), stdin ) ;
for( int i = 0 ; i < n ; i++ )
{
if ( sscanf( cBuf, aFormat, va_arg( args, void* ) ) )
va_end( args ) ;
return ;
}
}
}
"dummy" argumentet er blot tilføjet fordi jeg læste noget med at va_start() ikke fungerer med pointers... og fordi den fjernede en hulens masse fejl :)
Det hele compiler fint, og den vil også gerne tage imod ét argument, men hvis jeg bruger førnævnte
GetInput("Giv mig to tal:", "%d %d", &tal1, &tal2 )
Bliver tal2 helt forkert, mens tal1 er helt fin.