Text in Datei Schreiben und wieder auslesen
-
Hallo, sitze hier an einer Aufgabe und zwar sollen wir ein Programm erstellen, welches einen Dateinamen abfragt, anschließend kann man einen test einfügen (mit Auswahl ob die datei Überschrieben, oder der eingegebene Text angehängt werden soll. Zu guter Letzt soll der Text noch ausgebenen werden (der gesamte Inhalt der Datei).
Soweit funktioniert das bei mir auch, ich habe lediglich ein Problem bei der Ausgabe des Inhalts der Datei. Wenn ich das Programm starte, funktioniert beim ersten Durchlauf alles einwandfrei. Beim weiten mal jedoch gibt er den neu eingegebenen Text beim anhängen nicht mehr aus. Wenn ich die Datei aber überschreibe, funktioniert es wieder.Hier erstmal mein Code:
#define _CRT_SECURE_NO_DEPRECATE #include <stdio.h> #include <conio.h> #include <stdlib.h> int main () { char in[1024]; char str[100]; char modus[2]; char c, d, exit; int zeil, i; FILE * pFile; do{ system ("cls"); in[0] = '\0'; str[0] = '\0'; modus[1] = '\0'; i = 0; printf ("Bitte geben sie einen Dateinamen an\n"); gets (str); pFile = fopen (str,"r"); if (pFile!=NULL){ printf ("\n Datei gefunden"); printf ("\n Wollen sie die Datei ueberschreiben j / n?"); c = _getch (); printf ("%c\n", c); if (c == 106){ modus[0] = 'w'; } if (c == 110){ modus[0] = 'a'; } fflush (pFile); fclose (pFile); }else{ printf("\nDatei NICHT gefunden"); modus[0] = 'w'; } printf ("\nBitte geben Sie einen Satz ein\n"); for (i=0; i < 100 && in[i-1] != '@'; i++){ in[i] = _getch (); if (in[i] == 13){ in[i] = '\n'; } printf ("%c", in[i]); } fopen_s (&pFile, str, modus); i = 0; while (in[i] != '@'){ fputc(in[i], pFile); i++; } fputc ('\n', pFile); printf("\nDatei geschrieben"); fclose (pFile); printf("\nWollen sie Datei anzeigen j / n ?"); char z; z = _getch (); printf ("%c\n", z); if (z == 'j'){ fopen_s (&pFile, str, "r"); i = 0; zeil = 1; while (in[i] != EOF && i < 1024){ in[i] = fgetc (pFile); printf ("%c",in[i]); if (in[i] == '\n'){ zeil++; } if (zeil > 6){ printf ("\nEnde der Seite, weiter mit ENTER"); d = _getch (); if (d == 13){ system ("cls"); zeil = 1; } } i++; } fflush (pFile); fclose (pFile); } printf ("\nZum Beenden die @-Taste druecken, zum Fortfahren beliebige Taste\n"); exit = _getch(); }while (exit != '@'); return 0; }
Meine Vermutung ist, dass die Datei beim anhängen nochmal aktualisiert werden muss. Hab das fflush aber schon an alle erdenklichen Stellen gesetzt und trotzdem kein Erfolg.
Achja es sei noch zu erwähnen dass er die Texte aber brav in die Datei hineinschreibt. Nur beim lesen zickt er rum.
Wo könnte der Fehler noch sein? Ich mein alle Variablen werden wieder resetet ... bin mit meinem Latein am Ende.
-
Du schreibst ein C Programm und übersetzt mit einem C++ Compiler.
Das ist schon mal Schrott.
Auch habe ich schon mal einfachere Varianten zum Einlesen eines Strings gesehen, dein ominöses '@' habe ich nicht verstanden.
-
1. Ich weiß, dass ich einen C++-Compiler benutze.
2. Die Aufgabenstellung besagt nunmal dass wir Zeichenweise ein und auslesen sollen.
3. das "ominöse" @ ist die Ausstiegsklausel.Aber vielen Dank dass du mir bei meinem Problem geholfen hast ....
-
for (i=0; i < 100 && in[i-1] != '@'; i++){ // Bei i == 0 greifst du auf in[-1] zu. Das Element existiert nicht. in[i] = _getch (); if (in[i] == 13){ // was soll das? In ASCII ist \n == 13 in[i] = '\n'; // Und bei nicht ASCII ist das total daneben. } printf ("%c", in[i]); // Da bietet sich putchar(in[i]) an. } fopen_s (&pFile, str, modus); // Warum ist hier keine Fehlerbehandlung?
darum:
for (i=0; i < 100-1; i++) { in[i] = _getch (); if (in[i] == '@') break; putchar(in[i]); } in[i]='\0'; // '\0' ist die Stringendekennung in C ... i = 0; while (in[i] != '\0'){ fputc(in[i], pFile); i++; }