C Text Datei erstellen
-
trixx_128 schrieb:
So funktioniert es wunderbar aber bis zum ersten Leerzeichen.
So ist das Verhalten von
scanf("%s", text); //ACHTUNG das & muss weg
definiert.
Warum bist du nicht bei fgets geblieben?
Dann aber mehr als 2 Zeichenfgets (text, 999), stdin); // Wenn char text[1000];
Und du arbeitest bereits mit Arrays.
-
Wäre mal ein Grund, C++ einzusetzen:
ofstream datei; // Ausgabestream festlegen char text[20]; ... datei.open("xxxx.TXT"); // Datei öffnen ... fgets(text,10,stdin); // Text holen ... datei << "gewählt: " << text << endl; // irgendwas in die Datei schreiben ... datei.cose(); // Datei schliessen
Alles weitere kann ja in reinem C bleiben. Man gewinnt aber schnell Spass an C++ und nutzt bald mehr, z.B. CIN und COUT für die Standardeingabe und -ausgabe.
-
Wenn schon C++, dann doch bitte richtig:
char text[20]; ... ofstream datei("xxxx.TXT"); // Ausgabestream festlegen und gleich Datei öffnen ... fgets(text,10,stdin); // Text holen ... datei << "gewählt: " << text << '\n'; // irgendwas in die Datei schreiben und danach NICHT flushen ... } // Datei wird automatisch geschlossen
-
So nun habe ich es, es liegt daran das scanf in den input buffer ein <enter> noch setzt.
wenn fgets aufgerufen wird sieht er es und ist damit zufrieden,die Textdatei bleibt leer.
bevor man fgets wieder verwenden kann muss man den <stdin> buffer löschen.
fscanf(stdin,"%d", &wahl); .... fflush(stdin); .... fgets ( text, 100, stdin );
-
@SeppJ: Gut, kann man in C++ so machen wie du schreibst. Völlig falsch war mein Hinweis aber nicht. Z.B. dann, wenn während der Laufzeit erst der Dateiname festgelegt werden soll, ein und derselbe ofstream nacheinander mehrere Dateien erstellen soll, und und und. Bleibt nur << endl oder << ´\n´ worüber man reden kann. Aber der Fragesteller hatte eine C-Lösung gesucht. C++ war da nur ein kleiner lohnender Ausflug. So oder so ähnlich sind seinerzeit wohl alle C-Programmierer mit kleinen Schritten von C nach C++ umgestiegen. Auch ist es guter Stil, Systemresourcen selbst zu schliessen sobald man sie nicht mehr benötigt und das gilt genauso in C wie in C++.
Frohe Weihnachten - Feliz Navidad :xmas1:
-
trixx_128 schrieb:
fscanf(stdin,"%d", &wahl); .... fflush(stdin); .... fgets ( text, 100, stdin );
Schrott und nicht standardkonform. Du bist in die mittlerweile Top-Anfängerfalle gelaufen. Den Eingabepuffer löscht man standardkonform und nicht so wie du (und leider 99% aller Anfänger hier).
-
Natürlich bin ich ein Anfänger, und warum meinst du frag ich nach einen Tipp in diesem Forum.
Wenn du so schlau bist dann mach mal es richtig, und beweis das du nicht nur labbern kannst.
-
Auch wenn Wutz scheinbar dauergenervt ist (nichts für ungut :xmas1: ) hat er recht. Alternative wäre:
int c; while ((c = getchar()) != EOF && c != '\n');
Das Verhalten von fflush() auf input streams ist nicht definiert und somit ist fflush(stdin) nicht standardkonform.
-
Danke für deine Freundliche antwort werde es mir angucken und verändern. Ich kann solche leute nicht ausstehen, wenn er meint das er was besseres ist soll er hier nicht schreiben.
-
trixx_128 schrieb:
Danke für deine Freundliche antwort werde es mir angucken und verändern. Ich kann solche leute nicht ausstehen, wenn er meint das er was besseres ist soll er hier nicht schreiben.
In einem Forum wie diesem wird selbstverständlich auch Anfängern geholfen. Ist doch klar! Nur sollte auch ein Anfänger im Diskussionsstil nicht dieselben Patzer machen, die er bei anderen vielleicht zu recht bekritelt.