Variable Parameterliste mit Double-Werte
-
Hi Leute,
ich hab schon einiges zu einer solche liste, wie es sie bei printf() ja auch gibt, gefunden. Nur leider bezog sich das meiste auf char*. ich möchte einfach das ganze mit double machen, funktioniert aber irgendwie nicht so wie ich es mir dachte...#include <stdio.h> #include <stdarg.h> void test(double wert, ...) { va_list list; va_start(list, wert); printf ("%i\n",(int) wert); while ((wert = va_arg(list,double)) != 0) { printf ("%i\n",(int) wert); } va_end(list); } int main() { test(2,4,2,1,3); return(0); }
er gibt zwar alle angegebenen Werte aus, aber auch ne menge Nullen...
das ist jetzt natürlich nur beispielhaft. ich benötige das, weil ich in eine doppeltverkette liste mit einem funktionsaufruf werte speichern möchte.
vielen dank fürs lesen,
gruß
stolen
edit:
wer die links haben möchte:
http://www-info2.informatik.uni-wuerzburg.de/dclc-faq/kap7.html
http://www.fz-juelich.de/zam/docs/bhb/bhb_html/d0140/chapter_13/section_1.html
-
Verstehe deine Frage nicht ganz. Wie es aussieht ist dein Problem dass deine Funktion nicht weisst wie viele Argumente ihr übergeben wurden. Dein zweites Link ist die Lösung dieses Problems, Übergib als ersten parameter die Anzahl und dann die Werte.
Kurt
-
eigentlich will ichnur sehr ungerne am anfang die anzahl angeben^^
gibts da vielleicht eine möglichkeit das anders herrauszufinden?
danach suche ich grade.
falls es sowas nicht gibt, werde ich das wohl zähneknirschend vorne angeben lassen müssen...
trotzdem vielen dank
-
Es wird dir nichts anderes übrig bleiben als entweder vorne die Anzahl zu übergeben oder am ende einen bestimmten eindeutigen Wert der dir sagt das die parameterliste zu Ende ist. So ein Wert wird aber bei einer Liste von double schwierig zu finden sein ausser du kannst den Wertebereich irgendwie einschränken.
er gibt zwar alle angegebenen Werte aus, aber auch ne menge Nullen...
Der Grund dafür ist dass deine Funktion eben keine eindeutige Abbruchbedingung hat. Sie bricht erst ab wenn irgendwo am Stack eine double mit dem wert 0.0 gefunden wird, im schlimmsten Fall führt das zu einer Speicher Zugriffsverletzung. Funktionen mit variablen Parameterlisten wissen eben nicht wieviele Parameter ihnen übergeben worden sind.
Kurt
-
schade... hätt ja sein können.
vielen dank
-
kannst ein QuietNaN uebergeben und das abfragen, das sollte gehen
-
danke für alles!!
gruß
stolen