C Mehrere Dateien mit Schleife erstellen?
-
Hi. Ich benutze C.
Ich habe folgende Frage: Wie kann ich mehrere Dateien mit demselben Namen + eine aufsteigende nummer in einer Schleife erstellen?Wenn ich folgendes schreibe:
int main(int argc, char *argv[]) { int i=0; FILE *datei; for (i=0; i<=10; i++) { datei = fopen ("TEST%d.txt",i,[b]"w"[/b]); } return 0; }Dann gibt es ne Fehlermeldung, weil bei dem "w" irgendwie das i nicht hin darf oder so...
Danke schonmal für Hilfe!
Adrium.
-
Wenn du C benutzt solltest du auch im C-Forum posten.
Du kannst doch fopen nicht wie sprintf etc. benutzen. Baue dir deinen String erst zusammen und nutze den dann in fopen.
-
Sry, ist ANSI C dasselbe wie C ? Wenn ja, das wusste ich nicht.
-------------------------------------------------------------------Auf deine Antwort: Verstehe ich nicht. Ich bin gerade erst mit den Grundlagen bekannt, was meinst du mit
Baue dir deinen String erst zusammen und nutze den dann in fopen
Kannst du das vielleicht verständlich erklären?
THX, Adrium.
-
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html
Damit einen string zusammenbauen und dann erst fopen mit diesem string aufrufen.
In C++ geht das so:
... int i = 2; std::stringstream str; str << "blabla" << i << "mehr_blabla.."; std::ofstream out ( str.str().c_str()); ...
-
Ok, das ist eindeutig höher als wie weit ich bis jetzt in die Materie eingestiegen bin... Da muss ich jetzt erstmal die einzelnen Befehle verstehen.
-
Adrium schrieb:
Sry, ist ANSI C dasselbe wie C ? Wenn ja, das wusste ich nicht.
Selbst wenn nicht, wäre ANSI C++ jedenfalls noch weniger C als ANSI C.
ANSI steht für ein Standardisierungskomitee; ANSI C wird Synonym für den C-Standard verwendet, ebenso wie ANSI C++ für den C++ Standard steht.
-
Aber bei Wikipedia steht das so:
1. #include <stdio.h> int main (void) { FILE *datei; datei = fopen ("testdatei.txt", "w"); if (datei != NULL) { fprintf (datei, "Hallo, Welt\n"); fclose (datei); } return 0; }Wieso ist das bei dir, drakon, so anders? bzw wieso kann ich nicht einfach das von wikipedia in ne schleife packen?
-
Weil das C ist.
- Und ich C++ benutzt habe. 
Aber auch das Beispiel von Wikipedia gibt dir keine aufsteigende Nummer..
Wie gesagt, wenn du C willst, dann kommst du nicht drum herum das ganz in einen anderen Buffer zu schieben:
char[32] data; int i = 2; sprintf (data,"blabla_%d.txt" ,i); FILE* f = fopen (data , "w"); ...
-
a) du schließt die Datei nicht in der Schleife
b) du versuchst sie dennoch erneut zu öffnen, was nicht geht, da sie durch das vorherige Öffnen mit "w" gelockt ist
c) dein Versuch mit %d ist die Syntax von printf und Konsorten und hat nichts mit fopen zu tun.usw usf
du vermixt da einfach eine Menge
-
OK, dann muss ich jetzt wohl lernen, wie ich was in einen anderen Buffer schiebt ^^
Aber vielen Dank, für die schnelle und ausführliche Hilfe, nicht wie in manchen Foren, wo man erstmal angezickt wird, nur weil man Anfänger ist

-
Adrium schrieb:
OK, dann muss ich jetzt wohl lernen, wie ich was in einen anderen Buffer schiebt ^^
Aber vielen Dank, für die schnelle und ausführliche Hilfe, nicht wie in manchen Foren, wo man erstmal angezickt wird, nur weil man Anfänger ist

Aber ab jetzt bitte mit den C-spezifischen Fragen ins C-Forum.

-
drakon schrieb:
http://www.cplusplus.com/reference/clibrary/cstdio/sprintf.html
Damit einen string zusammenbauen und dann erst fopen mit diesem string aufrufen.
In C++ geht das so:
... int i = 2; std::stringstream str; str << "blabla" << i << "mehr_blabla.."; std::ofstream out ( str.str().c_str()); ...Hallo,
stehe vor dem selben Problem wie Adrium, nur gibt mir mein Kompiler folgende Fehlermeldung beim Kompilieren aus:
error C2297: '<<': Ungültig, da der rechte Operand vom Typ 'const char [7]' ist
error C2297: '<<': Ungültig, da der rechte Operand vom Typ 'const char [5]' ist
warning C4552: '<<': Operator hat keine Auswirkungen; Operator mit Nebeneffekt erwartetDie Fehler gelten alle für die Zeile 4 im obigen Listing. Was tun damit der das frisst?
-
#include <sstream> ...
-
super sache, besten dank