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
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
<<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
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; }
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
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.
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
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
Zobelzahn Geschrieben 27. März 2009 Autor Geschrieben 27. März 2009 Okay, jetzt läufts perfekt . Vielen Dank allerseits.
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
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden