Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : C - variable Parameterübergabe



Andi_Rostock
18-04-2006, 09:01
Hallo ich möchte mein Programm eine variable Parameterliste verpassen. Also ungefähr so:
"./Programm AnzPara Param1 Param2 Param3 ..."
bzw.
./Programm 3 1e5 1e6 1e-3
./Programm 5 1e4 1e3 1e-2 0.23132 23132

Bisher sieht´s bei mir so aus. Ist leider nur statisch


int main(int argc, char **argv)
{
float test[2];
if (argc==3){
sscanf(argv[1],"%f",&test[0]);
sscanf(argv[2],"%f",&test[1]);
}
else {
test[0]=1.;
test[1]=4;
}
printf(" %f %f \n",test[0],test[1]);
}


Für mich stellt sich die Frage, wie ich die Geschichte dynamisch hinbekomme.
Also irgendwie so:



float *test;
int i,n;
if (argc>=2){
sscanf(argv[1], "%i",&i);

test=calloc(i, sizeof(float));
for (n=2;n<i+2;n++){
sscanf(argv[n],"%f",&test[n]);
}
}


Klappt natürlich nicht. :(
Habt Ihr eine Idee?

Viele Grüße
Andreas

SeeksTheMoon
18-04-2006, 09:16
was Du suchst, nennt sich Ellipse.

Andi_Rostock
18-04-2006, 09:27
Hallo,

was ist denn ellipse. Danach googlen ist ja net so einfach :-)

Caveman
18-04-2006, 09:49
Warum übergibst Du denn die Anzahl der Parameter?
Die steht doch sowieso schon in der Variable argc.

Um wieviele Parameter soll es denn ungefähr gehen?
10, 100, 1000 oder noch mehr?

quinte17
18-04-2006, 10:11
also bei folgender geschichte:
"./Programm AnzPara Param1 Param2 Param3 ..."
kannst du getrost auf AnzPara verzichten. ist eine doppelte information, die in
int argc // (ARGument Count)
drinsteht.

zu der dynamischen geschichte müsste man ungefähr so vorgehen:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
float *test;
float y;
int i,j;
printf("%d\n",argc);
if(argc > 1)
{
test = (float *) malloc((argc - 1) * sizeof(float));
if(test == NULL)
{
printf("ERROR\n");
exit(1);
}
for (i=1; i < argc;i++)
{
sscanf(argv[i],"%f",&test[i-1]);
printf("%f\n",test[i-1]);
}
}
return 0;
}

greetz

Andi_Rostock
18-04-2006, 11:40
Stimmt, die ganze Sache war ein wenig doppelt gemoppelt.
Es sollen nur wenige Parameter übergeben werden; 5-10.

Vielen Dank
Andreas

Thomas Engelke
26-04-2006, 13:01
Hier (http://c-faq.com/varargs/varargs1.html) solltest du alles finden.

TME

7.e.Q
08-05-2006, 10:30
Ich glaube, da ist etwas falsch verstanden worden. Wenn ich das korrekt verstanden habe, geht es hier um die Aufrufparameter des Programms (argc, argv), nicht um die Übergabeparameter einer Funktion. Letzteres nennt sich Ellipse, das ist schon korrekt.

Für ersteres würde mich auch interessieren, ob's da vordefinierte Parser-Mechanismen gibt.

Joghurt
08-05-2006, 11:37
Für ersteres würde mich auch interessieren, ob's da vordefinierte Parser-Mechanismen gibt.
http://www.gnu.org/software/libc/manual/html_node/Getopt.html

7.e.Q
09-05-2006, 06:11
Aaaaaaha, danke Joghurt. Mal wieder :)