Forum: PC-Programmierung Problem mit argc


von Sandy (Gast)


Lesenswert?

Liebe Kollegen!

Ich habe einen Code bekommen den ich durchschauen soll. Leider scheitere 
ich schon bei den ersten Zeilen. Er beendet sich immer selber mit 
exit(1).

Wie kann ich das verhindern??? (einfach auskommentieren geht nicht)
1
int main(int argc, char *argv[])
2
{
3
  long  i,j;
4
  bit   help;
5
  //...
6
7
8
  printf("    Simulation \n\n");
9
  if(argc!=4) 
10
    {
11
      printf("###");
12
      exit(1);
13
    }
14
 
15
  Test2=atoi(argv[1]);
16
17
  Test2=atof(argv[2]);

Bussi
Sandy

von Timmo H. (masterfx)


Lesenswert?

Du bedenkst aber schon, dass argc mindestens "1" ist (argv[0] ist immer 
der Name der Binary selbst).

von Sandy (Gast)


Lesenswert?

Das Programm ist nicht von mir, ich solls nur verstehen.

soll ich if(argc!=4) auf if(argc!=3) ändern?

Der ders geschrieben hat sagt bei ihm geht es so wie es ist.

Bussi
Sandy

von Timmo H. (masterfx)


Lesenswert?

Bei if(argc!=4) wird das Programm mit exit(1) verlassen, wenn die anzahl 
der Parameter die zu zusätzlich eingibst ungleich "3" ist.
Wenn das Programm also test.exe heisst, und du es so aufrufst:
1
test.exe hallo du sau
Dann wird das was innerhalb der if-Abfrage steht nicht ausgeführt
Wenn du das Programm so aufrufst:
1
test.exe hallo du doofe sau
Dann hingegen schon

von Skua (Gast)


Lesenswert?

Lass dir vor dem exit den inhalt von argc und argv ausgeben.

von Sandy (Gast)


Lesenswert?

Alles klar, das heisst ich muss das Programm mit test.exe und dann mit 4 
Parametern aufrufen richtig?

von Timmo H. (masterfx)


Lesenswert?

Sandy schrieb:
> Alles klar, das heisst ich muss das Programm mit test.exe und dann mit 4
> Parametern aufrufen richtig?
Oder 1 oder 2 oder 4 oder 5 oder 28452
Alles nur nicht 3
Dass "!=" ungleich bedeutet weißt du aber oder? Und wenn nicht, dann 
weißt du es jetzt.

von Sandy (Gast)


Lesenswert?

ich springe doch in´s if wenn argc nicht 4 ist. Wiso kann ich dann jede 
anzahl außer 3 eingeben?

von Timmo H. (masterfx)


Lesenswert?

Sandy schrieb:
> ich springe doch in´s if wenn argc nicht 4 ist. Wiso kann ich dann jede
> anzahl außer 3 eingeben?
Weil - wie bereits gesagt - argc MINDESTENS "1" ist in argc[0] (also das 
erste Element steht immer der name der binary als parameter.
Wenn du also test.exe ohne Parameter aufruftst ist argc bereits 1 und in 
argv[0] steht test.exe. Also kannst du noch 3 weitere Parameter beim 
Aufruf eingeben bis argc "4" ist

von Sandy (Gast)


Lesenswert?

ok, das verstehe ich jetzt.

Dann müsste ich aber 3 Parameter eingeben. Ich will ja nicht 
reinspringen oder?

von Timmo H. (masterfx)


Lesenswert?

Ähm sorry,
ist natürlich genau umgekehrt. Hatte ich anfangs ja auch so geschrieben. 
Du musst 3 Parameter eingeben wenn er NICHT den Code in der If-Anweisung 
ausführen soll.

von Sandy (Gast)


Lesenswert?

Ihr seid SUPER! Ich kenn mich aus und der Code läuft.
(jetzt muss ich ihn "nur noch" verstehen)

DANKE
Bussi
Sandy

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.