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.


Anmelden zum Antworten