D
Dennis Schulz
Hi all,
i am iterating through the whole file looking for besitzer.
When there is a match, i want the current record to be modified (add
zuschlag) and saved again at the same position in the file.
Here is the problem:
the fwrite in my coding overwrites the next data record
instead of replacing the current one. How can I jump one record back?
Do I have remember the index and iterate from the beginning again, or
is there a more elegant method?
Thanks, Dennnis
int Zuschlag(char besitzer[],int zuschlag) {
printf("Zuschlag fuer %s\n\n", besitzer);
FILE *fischfile;
int fisch_geschrieben;
// enthält die anzahl der von fread gelesenen saetze
int satz_gelesen;
// öffne datei als binaerstream zum lesen und schreiben
fischfile=fopen(DATEINAME, "r+b");
Fischsatz akt_fisch;
do {
satz_gelesen = fread(&akt_fisch, sizeof akt_fisch, 1,
fischfile);
// wenn erfolgreich gelesen...
if (satz_gelesen != 0) {
if (strcmp(akt_fisch.besitzer, besitzer)==0) {
akt_fisch.preis = akt_fisch.preis + zuschlag;
//*********************************************************
// Here is the problem: the fwrite overwrites the next data
// record instead of replacing the current one. How can I jump one
// record back? Do I have remember the index and
iterate from the
// beginning again, or is the a more elegant method?
//*********************************************************
fisch_geschrieben = fwrite(&akt_fisch, sizeof
akt_fisch, 1, fischfile);
}
}
} while (satz_gelesen == 1); //bis kein satz mehr gelesen wurde
if (fclose(fischfile)==EOF) {
fprintf(stderr, "Fehler beim Schliessen");
return -3;
}
if (fisch_geschrieben!=1) {
fprintf(stderr, "Fehler beim Schreiben");
return -2;
}
if (ferror(fischfile)) {
/* An error occurred on the stream */
fprintf(stderr, "Fehler beim Streaming");
return -3;
} else {
/* end-of-file was encountered on the stream */
printf("%s","END OF FILE");
return 0;
}
}
i am iterating through the whole file looking for besitzer.
When there is a match, i want the current record to be modified (add
zuschlag) and saved again at the same position in the file.
Here is the problem:
the fwrite in my coding overwrites the next data record
instead of replacing the current one. How can I jump one record back?
Do I have remember the index and iterate from the beginning again, or
is there a more elegant method?
Thanks, Dennnis
int Zuschlag(char besitzer[],int zuschlag) {
printf("Zuschlag fuer %s\n\n", besitzer);
FILE *fischfile;
int fisch_geschrieben;
// enthält die anzahl der von fread gelesenen saetze
int satz_gelesen;
// öffne datei als binaerstream zum lesen und schreiben
fischfile=fopen(DATEINAME, "r+b");
Fischsatz akt_fisch;
do {
satz_gelesen = fread(&akt_fisch, sizeof akt_fisch, 1,
fischfile);
// wenn erfolgreich gelesen...
if (satz_gelesen != 0) {
if (strcmp(akt_fisch.besitzer, besitzer)==0) {
akt_fisch.preis = akt_fisch.preis + zuschlag;
//*********************************************************
// Here is the problem: the fwrite overwrites the next data
// record instead of replacing the current one. How can I jump one
// record back? Do I have remember the index and
iterate from the
// beginning again, or is the a more elegant method?
//*********************************************************
fisch_geschrieben = fwrite(&akt_fisch, sizeof
akt_fisch, 1, fischfile);
}
}
} while (satz_gelesen == 1); //bis kein satz mehr gelesen wurde
if (fclose(fischfile)==EOF) {
fprintf(stderr, "Fehler beim Schliessen");
return -3;
}
if (fisch_geschrieben!=1) {
fprintf(stderr, "Fehler beim Schreiben");
return -2;
}
if (ferror(fischfile)) {
/* An error occurred on the stream */
fprintf(stderr, "Fehler beim Streaming");
return -3;
} else {
/* end-of-file was encountered on the stream */
printf("%s","END OF FILE");
return 0;
}
}