lothar_matthäus
Mitglied
Hallo,
ich habe ein garantiert einfaches Problem mit der fprintf()-Funktion, aber ich finde keine Lösung.
Ich möchte eine Datei erstellen und nach jedem Programmstart modifizieren
Dazu soll eine Datei erstellt und wenn diese bereits existiert, deren Inhalt einlesen werden.
(Inhalt pro Zeile: "C 0.8382 1.83347 -2.3884" -> C Zahl Zahl Zahl)
Beim Wiederholen dieser Prozedur schreibt irgendwann (meist nach 7-20 Wdhg) fprintf() extra Zahlen
nach dem letzten Zeilenumbruch. An der Stelle sollte eigentlich nichts mehr kommen, da die Datei direkt im nächsten Schritt mit fclose() geschlossen wird.
Wenn ich auf den Buchstaben "C" in der Aus- und Eingabe verzichte, so gibt es keine Probleme.
fscanf() hat keine Probleme beim einlesen nur die Ausgabe fprintf().
Ich hab den Code hinzugefügt und ein Script damit einem ein ständiges Neustarten erspart bleibt.
Wenn das Script läuft, stoppt fscanf() irgendwann, da das Ausgabefile "test.dat" nun ein zusätzliches
Zeichen enthält, was es natürlich nicht erwartet.
Bei mir lässt sich dieser "Fehler" ziemlich zuverlässig zu reproduzieren.
Ich wäre dankbar über Hinweise woran es liegen könnte.
Gruß,
LM
ich habe ein garantiert einfaches Problem mit der fprintf()-Funktion, aber ich finde keine Lösung.
Ich möchte eine Datei erstellen und nach jedem Programmstart modifizieren
Dazu soll eine Datei erstellt und wenn diese bereits existiert, deren Inhalt einlesen werden.
(Inhalt pro Zeile: "C 0.8382 1.83347 -2.3884" -> C Zahl Zahl Zahl)
Beim Wiederholen dieser Prozedur schreibt irgendwann (meist nach 7-20 Wdhg) fprintf() extra Zahlen
nach dem letzten Zeilenumbruch. An der Stelle sollte eigentlich nichts mehr kommen, da die Datei direkt im nächsten Schritt mit fclose() geschlossen wird.
Wenn ich auf den Buchstaben "C" in der Aus- und Eingabe verzichte, so gibt es keine Probleme.
fscanf() hat keine Probleme beim einlesen nur die Ausgabe fprintf().
Ich hab den Code hinzugefügt und ein Script damit einem ein ständiges Neustarten erspart bleibt.
Wenn das Script läuft, stoppt fscanf() irgendwann, da das Ausgabefile "test.dat" nun ein zusätzliches
Zeichen enthält, was es natürlich nicht erwartet.
Bei mir lässt sich dieser "Fehler" ziemlich zuverlässig zu reproduzieren.
Ich wäre dankbar über Hinweise woran es liegen könnte.
Gruß,
LM
C++:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(argc,argv )
int argc; char *argv[];
{
double x[7],y[7],z[7];
int N=7,i;
FILE *fp;
srand(time(NULL));
/*Datei anlegen oder auslesen wenn die Datei bereits vorhanden.*/
fp=fopen("test.dat","r+");
if(NULL==fp){
fp=fopen("test.dat","w+");
for(i=0;i<N;i++){ x[i]=0; y[i]=0; z[i]=0; }
}else{
i=0;
while((fscanf(fp,"C\t%lf\t%lf\t%lf\n",&x[i],&y[i],&z[i]))!=EOF)
{ i++; }
}
/*Felder x,y,z beliebig verändern.*/
for(i=0;i<7;i++){ x[i]+=(rand()%10)-5; y[i]+=(rand()%10)-5; z[i]+=(rand()%10)-5; }
/*Felder x,y,z in Datei schreiben. Hier tritt irgendwann der Fehler auf*/
rewind(fp);
for(i=0;i<N;i++){
fprintf(fp,"C\t%12.15lf\t%12.15lf\t%12.15lf\n",x[i],y[i],z[i]);
}
fclose(fp);
}
Code:
#! /bin/bash
cc simpel.c
for i in `seq 1 30`;
do
./a.out
echo $i
sleep .5
done