Text aus Datei lesen und in andere - nicht leere -Datei schreiben

Fischy33

Cadet 4th Year
Registriert
Mai 2013
Beiträge
66
Hallo zusammen:
Ich möchte 3 Variablen bzw. Tag, Monat und eine Zahl aus einer Datei lesen, in irgendeiner weise zwischenspeichern und anschließend wieder in eine andere Datei reinschreiben..
Das Schreiben klappt an sich gut, jedoch habe ich schwierigkeiten den passenden Typ zu finden..
Ich habe lange gesucht, aber als Anfänger fehlt es mir extrem schwer andere Quellcodes mit ähnlichem Ziel zu verstehen und für meine Zwecke umzusetzen..
Ich bin dann irgendwann bei wikibooks gelandet und habe einfach mal deren code 1:1 in 2 neue Programme geschrieben:
PRG1:


#include <stdio.h>

int main (void)

{

FILE *datei;

datei = fopen ("testdatei.txt", "w");

if (datei == NULL)

{

printf("Fehler beim oeffnen der Datei.");

return 1;

}

fprintf (datei, "Hallo, Welt\n");

fclose (datei);

return 0;

}

PRG2:


#include <stdio.h>



int main (void)

{

FILE *datei;

char text[100+1];



datei = fopen ("testdatei.txt", "r");

if (datei != NULL)

{

fscanf (datei, "%100c", text);

/* String muss mit Nullbyte abgeschlossen sein */

text[100] = '\0';

printf ("%s\n", text);

fclose (datei);

}

return 0;

}
Die Ausgabe bei printf ist aber nicht wie bei wikibooks Hallo Welt sondern zb. "+ÿ_v4Á£É" und verändert sich jedes mal wenn ich das Programm erneut ausführe...
Und jetzt weiß ich einfach überhaupt nicht, wieso das bei mir nicht hinhaut...
Danke für alle hilfreichen Antworten im Voraus!!
PS:(Mir ist egal wie die Zahlen eingelsen werden Stellenweise oder Zeilenweise oder was auch immer, hauptsache es tut :) )
 
1) Benutze bitte die code-Tags, um Quellcode zu posten. Du siehst ja, dass das so sehr schwer zu lesen ist.
2) Der Format-String "%100c" in deiner fscanf-Anweisung tut nicht das, was du glaubst. Er liest lediglich ein Zeichen ein. Die Zahl direkt nach dem Prozent-Zeichen tut laut ( http://www.cplusplus.com/reference/cstdio/fscanf/ ) folgendes:

width
Specifies the maximum number of characters to be read in the current reading operation (optional).

Da aber "%c" sich eh immer nur auf ein Zeichen bezieht, macht die zusätzliche Einschränkung "maximal 100 Zeichen" hier keinen Sinn. Was du möchtest, ist der Formatspezifizierer "%s". Der bezieht sich auf eine komplette Zeichenkette. Hier wäre dann die zusätzliche Einschränkung "maximal 100 Zeichen" tatsächlich sinnvoll, da dein Ziel-Array nur maximal so viele Zeichen fassen kann. Also:

fscanf( datei, "%100s", text );


P.S. 3) Füge dem Titel deines Threads noch den Präfix [C] bei, damit man gleich erkennt, dass es sich hier um ein C-Thema handelt.
 
Zuletzt bearbeitet: (Vergessen, den Link zur Referenz einzufügen ...)
Wahrscheinlich handelt es sich hier um ein C-Programm?

Versuch mal folgende Variante:

fscanf( datei, "%100s", text );

oder sogar nur:

fscanf (datei, "%s", text);

Noch besser in einer Schleife auf Dateiende prüfen:

while( fscanf( datei, "%s", text ) != EOF )
{
printf( "%s\n", text );
/* usw., usw. */
}
 
Okay, danke für die Hinweise, ich werde sie in Zukunft verfolgen.
Was mein Problem an geht: Gelöst!
 
Zurück
Oben