Veröffentlicht 31. Oktober 200717 j 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
31. Oktober 200717 j 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
31. Oktober 200717 j 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.
31. Oktober 200717 j 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"); }
31. Oktober 200717 j Hast du mal versucht was passiert, wenn man das Programm ohne übergabeparameter aufruft?
31. Oktober 200717 j 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
31. Oktober 200717 j 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.
1. November 200717 j 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.
2. November 200717 j 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"; }
2. November 200717 j In diesem Fall hast du Glück, da per Definition argv[argc] NULL sein _sollte_. Nach welcher Definition denn?
2. November 200717 j Argument Definitions Aber ich würde es wie gesagt natürlich trotzdem selber überprüfen.
2. November 200717 j Oh, hab wohl was falsches behauptet if (argc == 2) { ... } else { cout << "Bitte genau einen Parameter eingeben"; } da der Programmname ja der erste Parameter ist...
2. November 200717 j 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
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.