rene87
Lieutenant
- Registriert
- Mai 2007
- Beiträge
- 752
Moin
ich habe wie der Titel schon vermuten lässt ein kleines Problem mit einen Program was files bearbeiten soll.
Die Aufgabe ist folgende:
nur macht es leider nicht das was es soll.
wenn es einen fehlerhaften Datensatz findet ersetzt es ihn nicht durch einen Korrigierten sondern fügt einen Berichtigten hinten an.
Dadurch das es denn Falschen nicht überschreibt bin ich einer Endlosschleife da er immer wieder denn einen falschen Berichtigen will.( aus einer 3KB großen Datei ist nach ca. einer Minute eine 50MB Große geworden)
Der Datensatz und die Datei wurde hier mit erstellt
selbst unser Übungsleiter konnte innerhalb der Übungszeit keinen Fehler finden
ich habe wie der Titel schon vermuten lässt ein kleines Problem mit einen Program was files bearbeiten soll.
Die Aufgabe ist folgende:
Das soll mit diesen Programm gemacht werdenEs soll in allen Datensatzen mit der Fachrichtungsnummer (Datenfeldname fnr) 10333 diese durch 10300 ersetzt werden.
Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20], vorname[20];
int jahr;
int fnr;
char geschlecht;
int abinote;
} satz_typ;
void Erstellen();
void Auswerten();
void eingabe(satz_typ *s);
void erstellenund();
int main() {
FILE *f;
satz_typ s;
f = fopen("c:\\c\\student.dat", "r+b"); /* binäres File */
if (f == NULL) {
perror("Fehler beim Oeffnen"); /* Fehler beim Oeffnen */
exit(EXIT_FAILURE); /* exit */
}
/*** Sukzessives Lesen der Sätze mit fread bis fread 0 zurückgibt ***/
while (fread(&s, sizeof(satz_typ), 1, f) != 0) {
if (s.fnr==10333){ /* Verarbeiten des Satzes */
fseek(f,ftell(f)-sizeof(satz_typ),SEEK_SET);
s.fnr=10300;
fwrite(&s, sizeof(satz_typ),1, f);
}
}
fclose(f); /* Schließen der Datei */
return 0;
}
wenn es einen fehlerhaften Datensatz findet ersetzt es ihn nicht durch einen Korrigierten sondern fügt einen Berichtigten hinten an.
Dadurch das es denn Falschen nicht überschreibt bin ich einer Endlosschleife da er immer wieder denn einen falschen Berichtigen will.( aus einer 3KB großen Datei ist nach ca. einer Minute eine 50MB Große geworden)
Der Datensatz und die Datei wurde hier mit erstellt
Code:
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char name[20], vorname[20];
int jahr;
int fnr;
char geschlecht;
int abinote;
} satz_typ;
void eingabe(satz_typ *s);
main() {
FILE *f;
satz_typ s;
char ch;
f = fopen("c:\\c\\student.dat", "ab"); /* binäres File */
do {
eingabe(&s);
fwrite(&s, sizeof(satz_typ), 1, f); /* sizeof Operator */
printf("Weiteren Satz? (j/n)"); ch = getchar(); getchar();
} while ((ch == 'j') || (ch == 'J'));
fclose(f);
return 0;
}
void eingabe(satz_typ *s) {
char ch;
printf("Name: "); gets((*s).name); /* oder s->name */
printf("Vorname: "); gets((*s).vorname);
printf("Geburtsjahr: "); scanf("%d", &(*s).jahr);
printf("Fachrichtungnummer: "); scanf("%d", &(*s).fnr);
printf("Abiturnote: "); scanf("%d", &s->abinote); getchar();
printf("Geschlecht(m/w): "); ch = getchar(); getchar();
if (ch=='m'|| ch=='M') {
(*s).geschlecht = 'm';
}else {
(*s).geschlecht = 'w';
}
}