Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: [Opgelost] [C] [VAL] Probleem met functie  (gelezen 1085 keer)

Offline Joshua822

  • Lid
[Opgelost] [C] [VAL] Probleem met functie
« Gepost op: 2009/08/20, 20:17:43 »
Hallo allemaal.

Als eerste, wil ik even de afkorting "VAL" verklaren. Hiermee bedoel ik "Variabele argument lijst ". Ik zal deze ook verderop in deze post en dit draadje gebruiken.

Dit is nog zeer nieuwe leerstof voor mij en ik hoop daarom ook dat iemand mij advies kan geven.

Ik wil dus een simpele functie schrijven met behulp van een VAL die een willekeurig ( minstens één ) aantal argumenten neemt en deze bij elkaar optelt.

Nu, ik heb hiervoor de volgende code geschreven :

#include <stdarg.h>
#include <stdio.h>

 double add ( int a, ... )
 {
   double som;
   int x;
   va_list termen;
   va_start ( termen, a );

   for ( x = 0; x < a; x++ )
     som += va_arg ( termen, int );

   va_end ( termen );
 
   return som;
 }

 int main()
 {
   double uitvoer;
   uitvoer = add ( 6, 12, 21 );
   printf ( "%d", uitvoer );
 
   return 0;
 }

Maar ik krijg verkeerde uitvoer als, bijvoorbeeld "1740636160", dat is niet echt de bedoeling neem ik aan.

Nog even over de For lus, met de expressie x < a wil ik proberen te kijken of x kleiner is dan het aantal argumenten, maar ik weet niet of ik dit goed doe.

Alvast hartelijk bedankt :)
« Laatst bewerkt op: 2009/08/20, 22:02:52 door Joshua822 »

Offline profoX

  • Lid
    • wesley
    • Lionslink
Re: [C] [VAL] Probleem met functie
« Reactie #1 Gepost op: 2009/08/20, 20:42:03 »
- variabele a hoort niet bij de variabele argumenten lijst, hier kan je bv. het aantal getallen zetten, anders kan de functie dit niet weten
- je tracht een double als een integer uit te printen

Probeer dit:

#include <stdarg.h>
#include <stdio.h>

 double add ( int a, ... )
 {
   double som;
   va_list termen;
   va_start ( termen, a );

   for ( ; a > 0; a-- )
     som += va_arg ( termen, int );

   va_end ( termen );

   return som;
 }

 int main()
 {
   double uitvoer;
   uitvoer = add ( 3, 6, 12, 21 );
   printf ( "%g\n", uitvoer );

   return 0;
 }
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

Offline Joshua822

  • Lid
Re: [C] [VAL] Probleem met functie
« Reactie #2 Gepost op: 2009/08/20, 22:02:04 »
Bedankt, dit probleem is opgelost.