Avatar billede tangveje Nybegynder
27. september 2004 - 13:43 Der er 5 kommentarer og
1 løsning

Variabelt antal argumenter

I relation til dette spm... http://www.eksperten.dk/spm/544062

Jeg 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.
Avatar billede arne_v Ekspert
27. september 2004 - 13:52 #1
Check lige om din compiler har vsscanf !

Hvis ja kan man:

vsscanf(cBuf, aFormat, args);
Avatar billede tangveje Nybegynder
27. september 2004 - 13:58 #2
Rigtigt nice, det virker. Og så simpelt det er :)

Nu ser det ud til at det eneste problem der er tilbage, er at hvis jeg giver den et input ala "1,a" eller lign, så går der ged i den, istedet for at den ber om et nyt input (hvilket den gør hvis der kun er et argument)
Avatar billede arne_v Ekspert
27. september 2004 - 14:02 #3
check hvad den returnerer - ikke bare true/false - men om returværdi er lig med n
Avatar billede tangveje Nybegynder
27. september 2004 - 14:05 #4
Nå ja, det siger næsten sig selv :)

Men endnu en gang, mange tak for hjælpen
Avatar billede arne_v Ekspert
27. september 2004 - 14:07 #5
all set ?
Avatar billede tangveje Nybegynder
27. september 2004 - 14:10 #6
Jep, det kører helt perfekt nu :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester