Kevinst Geschrieben 31. Oktober 2007 Geschrieben 31. Oktober 2007 Hallo, ich habe folgendes Problem undzwar soll ich ein Programm erstellen was per cmd aufgerufen wird und dann direkt beim aufruf parameter übergeben bekommen soll. Das Programm soll beim aufruf eine anzahl von sekunden als parameter übergeben bekommen, welche ich dann in der Konsolenanwendung verarbeiten möchte. Das ganze soll in c++ geschrieben werden und eine Konsolenanwendung sein. Den programmstart stelle ich mir in cmd wie folgt vor: meinProgramm 60 (um den Parameter 60 sekunden anzugeben). Kann mir da jemand sagen wie das funktioniert? Danke Zitieren
Hexagon Geschrieben 31. Oktober 2007 Geschrieben 31. Oktober 2007 Moin, Kann mir da jemand sagen wie das funktioniert? Klar: int main(int argc, char* argv[]) argc == Anzahl der Übergabeparameter argv == Array auf die übergebenen Argumente als char-Zeiger Zitieren
Kevinst Geschrieben 31. Oktober 2007 Autor Geschrieben 31. Oktober 2007 ok danke für die schnelle Dntwort. jetzt habe ich nur das Problem, das ich den Parameter als char habe, brauche ihn aber als int um ihn weiter verarbeiten zu können. Zitieren
Kevinst Geschrieben 31. Oktober 2007 Autor Geschrieben 31. Oktober 2007 nei leider nicht aber ich werd dann mal google befragen danke! Edit: Habe google befragt und es klappt danke für deine Hilfe hier das Programm #include <iostream> #include <windows.h> using namespace std; int i,eingabe; int main(int argc, char* argv[]) { eingabe=atoi(argv[1]); for (i=eingabe;i>0;i--) { Sleep(1000); system("CLS"); cout<<"Noch "<<i<<" Sekunden"; } system("CLS"); } Zitieren
Hexagon Geschrieben 31. Oktober 2007 Geschrieben 31. Oktober 2007 Na bestens! :e@sy Aber bei deinem Programm fehlt noch ein Rückgabewert! Zitieren
Kael_Uka Geschrieben 31. Oktober 2007 Geschrieben 31. Oktober 2007 Hast du mal versucht was passiert, wenn man das Programm ohne übergabeparameter aufruft? Zitieren
Kevinst Geschrieben 31. Oktober 2007 Autor Geschrieben 31. Oktober 2007 ja wenn kein gültiger wert angegeben wir läuft das programm so durch ohne wartezeit auch bei buchstaben oder ähnliches. Habs aber auch noch was abgeändert: #include <iostream> #include <windows.h> using namespace std; int i,eingabe; int main(int argc, char* argv[]) { eingabe=atoi(argv[1]); if (eingabe>0) { for (i=eingabe;i>0;i--) { Sleep(1000); system("CLS"); cout<<"Noch "<<i<<" Sekunden"; } } else { cout<<"\n\nDer Parameter fuer die Wartezeit muss in folgendem Format eingegeben werden: \n"; cout<<"\nwarte n (n=Zeit in Sekunden)\n\n"; } } hier die EXE warte.zip]warte.zip Zitieren
qat Geschrieben 31. Oktober 2007 Geschrieben 31. Oktober 2007 ja wenn kein gültiger wert angegeben wir läuft das programm so durch ohne wartezeit auch bei buchstaben oder ähnliches. Ich würde mindestens argc überprüfen, da sonst undefiniertes Verhalten entstehen kann. argv auf Plausibilität zu überprüfen kann natürlich auch nicht verkehrt sein. Zitieren
Kevinst Geschrieben 31. Oktober 2007 Autor Geschrieben 31. Oktober 2007 sobald was falsches eingegeben wird liefert atoi den wert 0 zurück Zitieren
qat Geschrieben 1. November 2007 Geschrieben 1. November 2007 sobald was falsches eingegeben wird liefert atoi den wert 0 zurück Und wenn nichts als Parameter übergeben wird greifst du trotzdem einfach auf argv[1] zu. In diesem Fall hast du Glück, da per Definition argv[argc] NULL sein _sollte_. Aber solltest du das immer so machen und ohne Parameter z.B. auf argv[2] zugreifen wollen, und ohne jegliche Prüfung dies sofort in eine weiterverarbeitende Funktion schickst, kannst du nichtmehr vorraussagen was passiert. Zitieren
Kael_Uka Geschrieben 2. November 2007 Geschrieben 2. November 2007 Bist du dir da sicher, dass da IMMER "NULL" drin steht. Ich vermute mal er hat einfach Glück, dass der Speicher gerade nicht verwendet wird.... Einfach vorher abfragen: if (argc == 1) { ... } else { cout << "Bitte genau einen Parameter eingeben"; } Zitieren
Guybrush Threepwood Geschrieben 2. November 2007 Geschrieben 2. November 2007 In diesem Fall hast du Glück, da per Definition argv[argc] NULL sein _sollte_. Nach welcher Definition denn? Zitieren
qat Geschrieben 2. November 2007 Geschrieben 2. November 2007 Argument Definitions Aber ich würde es wie gesagt natürlich trotzdem selber überprüfen. Zitieren
Kael_Uka Geschrieben 2. November 2007 Geschrieben 2. November 2007 Oh, hab wohl was falsches behauptet if (argc == 2) { ... } else { cout << "Bitte genau einen Parameter eingeben"; } da der Programmname ja der erste Parameter ist... Zitieren
Guybrush Threepwood Geschrieben 2. November 2007 Geschrieben 2. November 2007 Argument Definitions Aber ich würde es wie gesagt natürlich trotzdem selber überprüfen. Ah stimmt hast recht gehabt. Dachte du meinst mit "diesem speziellen Fall" etwas anderes, denn alle weiteren Felder wären ja dann nicht mehr Null sondern undefiniert Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.