endlosschleife - warum ?
-
jo, beitragstitel sagt alles, ich komme aus der while-schleife nichtmehr raus, bis eine zugriffsverletzung auftritt. Die Datei "test.dat" enthält zwei Datansätze der Stuktur "TProgrammParameters".
Was mache ich falsch ?
struct TProgrammParameters { char code; char description[255]; char programm[255]; }; [.....] void edit(void) { char description[255]; BOOL same; FILE *programmfile; programmfile = fopen("test.dat", "r+b"); clrscr(); while(fread(&Data, sizeof(Data), 1, programmfile)) // <- da bleibt er ewig drin { same = true; if(strlen(description) == strlen(Data.description)) { for(int i=0;i<strlen(description);i++) { if(description[i] != Data.description[i]) same = false; } } else same = false; if(same == true) { Data.code = 5 printf("Description: "); gets(Data.description); printf("Path: "); gets(Data.programm); fseek(programmfile, (sizeof(Data)*(-1)), SEEK_CUR); fwrite(&Data, sizeof(Data), 1, programmfile); } } fclose(programmfile); }
-
ach ja oben hab ich natürlich ein Objekt der Struktur "TProgrammParameters" erstellt, es heisst "Data"
-
while(fread(&Data, sizeof(Data), 1, programmfile)) // <- da bleibt er ewig drin
Also so weit mein ungeübtes C++Auge das beurteilen kann heißt deine Schleife, dass er das durchführen soll, solange fread true zurückgibt. Und da die Datei ja nicht gelöscht wird, kanner weiterlesen und hört nicht mehr auf...
-
Zitat C-Builder Hilfe zu fread
Im Falle eines Fehlers oder am Dateiende wird die Anzahl von Elementen (möglicherweise 0) zurückgeliefert, die noch fehlerfrei gelesen werden konnten.Er müsste eigentlich die Schleife so oft durchlaufen bis das Dateiende erreicht ist, das heisst er müsste die schleife zwei mal durchlaufen. Es muss irgendwie am "spulen" mit fseek liegen, denn wenn ich das spulen und schreiben rausmache, läuft die Schleife nur zweimal durch.
Jemand noch ne Ahnung ?
-
Hab jetz die while Schleife ein wenig umgeschrieben, aber es ist immernoch eine Endloß-Schleife
while(fread(&Data, sizeof(Data), 1, programmfile)) { if(searchcode == Data.code) { Data.code = 5; printf("\ndescription: "); gets(Data.description); printf("\nexecutable: "); gets(Data.programm); fseek(programmfile, (sizeof(Data)*(-1)), SEEK_CUR); fwrite(&Data, sizeof(Data), 1, programmfile); } }
-
Kenn micih nicht so wirklich aus aber folgendes siehtetwas komisch aus
fseek(programmfile, (sizeof(Data)*(-1)), SEEK_CUR);
Kann sein das ich jetzt was falsches sag ber fuer mich sieht das so aus als ob du die größe von data *(-1) als 2. parameter übergibst also wuerd ich sagen was negatives glaub ich