Probleme beim Lesen aus der Commandozeile
-
Hallo!
Ich habe folgenden Code geschrieben:
#include <stdio.h> /* Dieses Programm tut bisher nichts weiter als Argumente aus der Commandozeile einzulesen und wieder auszugeben */ int main(int argc, char *argv[]) { char *x,*y, op; // 1) Kommandozeile auswerten if (argc != 4) { printf("Aufruf: %s <x> <op> <y> \n",argv[0]); return 1; } else { x = argv[1]; op = argv[2][0]; y = argv[3]; printf("%c", x); printf("%c", op); printf("%c", y); getchar(); } return 0; }
(Ich habe ihn an dieser Stelle vereinfacht, damit ihr euch aufs wesentliche konzentrieren koennt)
In Zeile 7 werden 4 Argumente erwartet.
Gebe ich nun in die Kommandozeile "main.exe 2 + 3" ein, funktioniert das Programm einwandfrei. Ebenso bei den Eingaben "2 - 3" und "2 / 3".
Lediglich bei der Eingabe "main.exe 2 * 3" Bekomme ich die Meldung aus Zeile 8, dass zu wenig Argumente eingegeben wurden.Weiss jemand, wieso "*" nicht verarbeitet werden kann?
Danke, Sassy
-
Versuch doch mal herauszufinden, wieviele (und welche) Kommandoparameter tatsächlich im Programm angekommen sind (
for(i=0;i<argc;++i)printf("%s",argv[i]);
). Ich würde ja spontan vermuten, daß * als Wildcard interpretiert und vom Betriebssystem zu irgenwas anderem erweitert wurde.PS: Strings (char*) solltest du lieber mit %s ausgeben als mit %c (letzteres ist für einzelne Zeichen).
-
Also sowohl mit deiner for schleife als auch ohne liest er die korrekten zeichen ein. Ausser bei * eben, das kann er nicht interpretieren.
-
Was liest er denn anstelle des * ein?
-
Er liest nichts ein, er spuckt direkt die Meldung aus, dass er zu wenig Argumente hat.
Zeile 8: if(argc != 4){
Zeile 9: printf("Aufruf: %s <x> <op> <y> \n",argv[0]);
-
Dann lass mal die if()-Abfrage weg und gib einfach alle übergebenen Argumente aus.
(ich weiß selber, daß das nichts mehr mit deinem ursprünglichen Priogramm zu tun hat - aber hier geht es darum, den Fehler einzugrenzen)
-
Ich hab ne Loesung.. und die ist sowas von billig
Ich geb einfach 'main.exe 4 "*" 2' ein, dann klappts *lol*
danke fuer die muehe