Zobelzahn Geschrieben 26. März 2009 Geschrieben 26. März 2009 Hallo allerseits! Ich habe ein kleines Problem: Meine Simulation schreibt per fprintf(datei,...) Daten in eine Datei, die ich per datei=fopen("Dateiname","a+") geöffnet habe. Wenn ich jetzt dieses Programm aber mehrmals zur gleichen Zeit, aber mit unterschiedlichen Parametern starte (ist notwendig, weil der Rechner an der Uni steht und oft über Nacht oder über Wochenende läuft, wenn ich nicht da bin; wenn ich das Programm nur einmal starte, ist er dann vielleicht samstag morgen fertig und tut den Rest des Wochendes nichts), dann schreiben die Programme munter in der Datei durcheinander, und ich kann die Daten wegwerfen. Deswegen meine Frage: Gibt es eine Möglichkeit, wie ich den Namen der Ausgabedatei erst zur Laufzeit festlegen kann? Etwa so, wie ich mit scanf die Parameter für das Programm einlese? Wäre für Hilfe wirklich dankbar. Zobelzahn Zitieren
flashpixx Geschrieben 26. März 2009 Geschrieben 26. März 2009 Übergib den Dateinamen doch per Kommandozeile. Sorry ich verstehe aber das Problem nicht Phil Zitieren
<<valle>> Geschrieben 26. März 2009 Geschrieben 26. März 2009 ich würds mit der Zeit machen char x[100]; string answ; time_t zeit; time(&zeit); strftime(x,99,"%c",localtime(&zeit)); answ= x; ofstream dat_aus; string dateiname="C:\\..."; dateiname+=answ; dateiname+=".txt" dat_aus.open(dateiname.c_str(), ios_base::out) dat_aus... valle Zitieren
Micha82 Geschrieben 27. März 2009 Geschrieben 27. März 2009 also ich würd es so machen... dann einfach als nächsten parameter eingeben und schon kannst es per kommandozeile beim aufruf mit angeben... wies flashpixx schon gesagt hat... int main(int argv, char *argc[]) { char datName[128]; if(argv<2) { printf("Zu wenig Parameter...\n"); return 1; } else sprintf(datName,"%s",argc[1]); printf("Der Name der Datei heißt: %s\n", datName); return 0; } Zitieren
Zobelzahn Geschrieben 27. März 2009 Autor Geschrieben 27. März 2009 Ok, danke für die Antworten. @Valle: Dein Vorschlag scheint C++ zu sein. Jedenfalls kennt mein Compiler eine Menge der Befehle nicht. Habe vergessen zu erwähnen, dass ich in C schreibe, sorray. @Micha82: Funktioniert so leider auch noch nicht. Bei if(argv<2) meckert mein Compiler rum: "comparison between pointer and integer" und bei sprintf(datName,"%s",argc[1]); "subscripted value is neither array nor pointer" Ich kapier das ohnehin nicht so ganz mit dem Parameter-Übergeben per Kommandozeile. Bisher wusste ich gar nicht, dass so etwas möglich ist. Tut mir Leid, dass ich mich da unpräzise ausgedrückt habe, aber mit Parameter meinte ich Simulationsparameter, also im Programm deklarierte Variablen. Ich bin halt Physiker und kein Informatiker. Zobelzahn Zitieren
Klotzkopp Geschrieben 27. März 2009 Geschrieben 27. März 2009 Micha82 hat die "traditionellen" Namen der main-Parameter vertauscht. Bei dir sind sie das vermutlich nicht. Du musst also nur im Code argc und argv vertauschen. Zitieren
Guybrush Threepwood Geschrieben 27. März 2009 Geschrieben 27. März 2009 Genau, auch wenn es im Prinzip egal ist wie du deine Variablen nennst macht man das da normalerweise so. Hier gibts auch nochmal ne Erklärung dazu: http://forum.fachinformatiker.de/c-c/19915-int-main-int-argc-char-argv.html Zitieren
Micha82 Geschrieben 27. März 2009 Geschrieben 27. März 2009 (bearbeitet) huuuuuuuuuuuuuuuups :upps edit: int main(int argc, char *argv[]) { char datName[128]; if(argc<2) { printf("Zu wenig Parameter...\n"); return 1; } else sprintf(datName,"%s",argv[1]); printf("Der Name der Datei heißt: %s\n", datName); return 0; } :p und dann beim programm aufruf zb: ./programmname dateiname.txt dann steht in der: argc die Anzahl der Argumente... in meinem Beispiel 2 (einmal der programmname und dann der dateiname mit endung) argv[] an 0-Stelle programmname und 1-Stelle dateiname.txt Bearbeitet 27. März 2009 von Micha82 Zitieren
Zobelzahn Geschrieben 27. März 2009 Autor Geschrieben 27. März 2009 Okay, jetzt läufts perfekt . Vielen Dank allerseits. Zitieren
TDM Geschrieben 27. März 2009 Geschrieben 27. März 2009 huuuuuuuuuuuuuuuups :upps Damit sowas nicht nochmal passiert, hier eine kleine Eselsbrücke: argc - argument count argv - argument values :beagolisc 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.