Vergleich klappt nicht
-
Hallo Leutz!
Ich habe in meinem aktuellen Programm einen Fehler, der eigentlich wirklich nicht auftreten sollte.
Dem Programm muss per Konsole ein Parameter übergeben werden. Dieser soll entweder ein kleines "i" oder "s" sein. Je nachdem, welcher übergeben wird, soll eine andere Funktion aufgerufen werden.
Logischerweise benutze ich dafür ne billige if()-Abfrage. Das kleine Problem ist: Obwohl der richtige Parameter übergeben wurde, erkennt er sie nicht als gleich an.
Hier der Codeauszug:if(*argv[1]=='i') { funktion1(); } if(*argv[1]=='s') { funktion2(); } else { cout<<"sonstewas!"; }
An sich nen ganz billiger Code. Das Problem ist wie gesagt bloß, dass trotz richtigem Parameter die else-Anweisung ausgeführt wird.
Ich habe keine Ahnung woran das liegen könnte.
Wenn mir jemand Tips oder Lösungsvorschläge geben könnte, wär das klasse.Danke im Voraus,
Prof. MAAD
-
Hi,
einen Fehler kann ich hier nicht erkennen.
Test doch mal, was überhaupt übergegeben ist.for (int i=0; i<argc; i++) cout << argv[i] << endl;
-
Versuchs mal damit:
int main(int argc, char * argv[]){ if(* argv[1]=='i'){ funktion1(); } else{ if(* argv[1]=='s'){ funktion2(); } else{ cout << "sonstwas"; } } }
Wenn du dann
deinProgramm i //NICHT: deinProgramm -i
aufrufst, sollte deine funktion1() ausgeführt werden.
-
Dann solltest du wohl mal deinen Debugger bemühen und kucken was in argv[1] drinsteht.
-
versuch mal argv[1] auszugeben ... oder meinst du vielleicht argv[0]?!
-
kann es sein, dass du einfach eine verschachtelungsstufe vergessen hast?
mach mal
if (){
....
} else if(){
...
}else{ ... }
-
Danke erstmal für die Antworten.
Ich habe den Fehler mitlerweile behoben:
elise's Tip war der Richtige. Danke dafür.
Tschau,
Prof. MAAD
-
Hab ich was anderes gesagt
-
argv[1] gibt nur nen pointer auf einen cstring zurück. D.h diesr kann nie 'i' sein. Wenn dann "i".
Daher mein lösungs vorschlag.if (argv[1][0] == 'i') //....
mfg
-
spjoe schrieb:
argv[1] gibt nur nen pointer auf einen cstring zurück. D.h diesr kann nie 'i' sein. Wenn dann "i".
Daher mein lösungs vorschlag.if (argv[1][0] == 'i') //....
mfg
Naja, das Dereferenzieren von argv[1] läuft im Prinzip auf das Gleiche 'raus...
-
@audacia
nein
-
spjoe schrieb:
@audacia
neinDoch. Du hast mich schön verunsichert
Ich hab' folgendes ausprobiert:#include <iostream> #include <conio.h> using namespace std; int main(int argc, char* argv[]) { cout << argv[1][0] << endl << *argv[1] << endl; getch (); return 0; }
Das Programm folgendermaßen gestartet:
"progname x"
gibt aus:x
xMoritz
-
-
Ringding schrieb:
spjoe schrieb:
@audacia
neinDann erklär doch mal den Unterschied!
In C gilt: (a)[0] == *(a)
Etwas ausführlicher:
argv ist vom typ char**
argv[1] gibt char* zurück
char* dereferenziert gibt char zurückMoritz