zuweisungsproblem
-
Hallo, könnt ihr mir vielleicht sagen warum das nicht geht `?
void delete_worker(){ /* Ein Arbeiter soll gelöscht werden indem abrogation auf eins gesetzt wird */ int delWorker, value; if((Test = fopen("Test","a+b"))==0) printf("Fehler"); rewind(Test); display_all_workers(); printf("nummer die gel%cscht werden soll: ",148); scanf(" %d",&delWorker); // delWorker ohne initialisierung ? while((value = fread(s_Workers, sizeof(s_Worker),1,Test))>0){ // value 0 printf("%d\n",value); if(s_Workers[0].number == delWorker){ s_Workers[0].abrogation = 1; } } }
-
Du liest einen Block von Workern ein, setzt anschließend (eventuell) den ersten davon auf "gelöscht" - und überschreibst den Block anschließend sofort durch den nächsten fread()-Aufruf. Das heißt, daß deine Markierung sofort wieder weg ist, ohne daß irgendwer außerhalb der Funktion etwas davon erfährt.
-
kannst du das problem etwas weiter erläutern ?
-
Kurz gesagt: Nachdem du das Element als "gelöscht" markiert hast, solltest du die modifizierten Daten auch wieder zurückschreiben. Andernfalls wird in der nächsten Runde der while(fread)-Schleife dieser geänderte Wert mit einem neuen Datensatz überschrieben und ist weg.
PS: Aber ständig auf das Dateisystem zuzugreifen ist sowieso langsam und auf Dauer unübersichtlich. Da solltest du besser deine komplette Datei einmal einlesen in ein Array (oder STL-Container), dann nur mit den Daten des Arrays arbeiten und vor Beendigung des Programms alle Daten wieder in die Datei zurückschreiben.