Frage zu einer einfachen Echo-Funktion
-
Hallo,
wie ist das '(i < argc-1) ? " " : ""' in folgendem Code zu verstehen?
#include <stdio.h> int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++) { printf("%s %s", argv[i], (i < argc-1) ? " " : ""); } printf("\n"); return 0; }
Danke!
-
Das ist der Konditional-Operator ?: - der wertet zuerst den Ausdruck "i<argc-1" aus und liefert je nach Ergebnis entweder " " oder "" zurück.
-
Hm, klassischer Fall von voreiligem posten. So wie ich es verstanden habe bedeutet das Argument folgendes:
Ist die Iterationsvariable kleiner als die Anzahl der Kommandozeilenargumente minus 1 so wird ein Leerzeichen zwischen die ausgegebenen Argumente gesetzt, ansonsten eben kein Leerzeichen?
-
Das hier:
return (i < argc-1) ? " " : ""
Ist die Kurzschreibweise von dem hier:
if (i < argc-1) { return " " } else { return "" }
Bei jedem Scheilfendurchgang wird geschaut ob das letzte Element erreicht wurde. Wenn nicht wird ein Space als Seperator mitausgegeben.
-
PongoPongo schrieb:
Ist die Iterationsvariable kleiner als die Anzahl der Kommandozeilenargumente minus 1 so wird ein Leerzeichen zwischen die ausgegebenen Argumente gesetzt, ansonsten eben kein Leerzeichen?
Wenn ich dich richtig verstanden habe, dann stimmt das
h
Vielleicht noch ein zwei Worte zu deinem gepostetem Code:
Das kleine Programm gibt alle Argumente aus, welchem ihm selber übergeben werden. Zwischen den Argumenten fügt es noch ein Leerzeichen ein und nur wenn das letzte Argument gedruckt wird, fügt es keine Leerzeichen mehr ein.Diesen Code könnte man auch so schreiben und er würde das gleiche machen:
#include <stdio.h> int main(int argc, char *argv[]) { int i; for(i = 0; i < argc; i++) { printf("%s", argv[i]); if(i < (argc - 1)) { printf(" "); } } printf("\n"); return(0); }
Hier noch ein Beispiel zum ominösen ?-Operator:
Das da:
i = (i <= 10 ? (i + 1) : 0);
ist das selbe wie das da:
if(i <= 10) { i = (i + 1); } else { i = 0; }
Ich habe jetzt dieses Beispiel gemacht, damit du das auch mal so ganz ohne return oder so siehst und nicht weils ich das gefühl habe meines sei hilfreicher (oder sonst wie besser) als das Beispiel von Bommel. Hier siehst du nämmlich seher schön, wie diesr Operator funktioniert (so hoffe ich zumindest).
mfg
Sputnik