problem mit struct und löschen
-
also ich habe eine art adressbuch geschrieben und möchte aus diesem einträge löschen.
for(i=0;i<*anzahlk;i++) { fscanf(datei,"%i%s",&Adressliste[i].kundennr,Adressliste[i].eingelesen); } fclose(datei); printf("Bitte zu loeschende knr eingeben\n"); scanf("%i",&auswahl); datei = fopen("neu.txt","a"); for(y=0;y<*anzahlk;y++) { if (auswahl == Adressliste[y].kundennr) { printf("%s\n\n",Adressliste[y].eingelesen); Adressliste[y].kundennr = 0; // Adressliste[y].eingelesen = 'a'; fprintf(datei,"\n\n%i\n%s",Adressliste[y].kundennr,Adressliste[y].eingelesen); } }
ich würde gerne sagen
Adressliste[y].kundennr = 0; --> das das einfach nichts ist
Adressliste[y].eingelesen = 'a'; --> und das auch.gibt es irgendwie so einen befehl ?
danke
-
Komplett einlesen, bearbeiten und wieder schreiben - was besseres fällt mir auf Anhieb auch nicht ein.
(zum Schreiben solltest du das File per "w" öffnen und dann alle Datensätze außer dem zu löschenden neu reinschreiben)
-
k danke funzt jetzt !!
datei = fopen("neu.txt","r"); for(i=0;i<*anzahlk;i++) { fscanf(datei,"%i%s",&Adressliste[i].kundennr,Adressliste[i].eingelesen); } fclose(datei); printf("Bitte zu loeschende knr eingeben\n"); scanf("%i",&auswahl); datei = fopen("neu.txt","w"); for(y=0;y<*anzahlk;y++) { if(auswahl != Adressliste[y].kundennr && z < *anzahlk-1) { fprintf(datei,"%i\n%s\n\n",Adressliste[y].kundennr,Adressliste[y].eingelesen); z++; } } fclose(datei); printf("der kunde %s wurde erfolgreicht gelöscht!\n",Adressliste[y].eingelesen); system("PAUSE"); }
-
hallo,
ich habe eine weitere frage dafuer wollte ich aber nicht einen extrqa thread aufmachen. also ich bin ja an meinem addressbuch bei. so jetzt habe ich das problem wenn ich daten aus meiner textdatei lösche.also ich speicher meine daten in einem struct. wenn ich jetzt einen datensatz lösche funktioniert das auch er wird an richtiger stelle aus der textdatei gelsöcht. wenn ich mir sofort danach aber die neuen kunden angucken will dann ist die liste der datensätze genauso lang wie vorher und der letzte wert ist doppelt. also habe ich meinetwegen ein array von 1-10 lösche ich 5 so rücken 6-10 nach . und auf platz 10 steht nochmal der datensatz von 9.
wie kann ich das machen ? ich hatte mir gedacht das ich vor der ausgabe der daten das ganze array/struct nochmal irgendwie lösche, sodass er die neuen daten komplett einlesen kann und der letzte wert dann weg ist. kann man sowas löschen irgendwie ?
danke
EDIT; achja wenn ich aus dem programm aussteige es wieder neu starte und mir dann die daten ausgeben lasse wird alles richtig angezeigt. in der textdatei steht auch alles korrekt es geht nur um den internen speicher den ich irgendwie überschreiben muss mit "gar nichts" oder irgendwie komplett löschen.
danke
-
Die Daten werden zwar aus deiner Datei gelöscht, aber im Array (und auf diesem Array arbeitest du intern) nur jeweils eine Position nach vorne geschoben, um die Lücke zu füllen. Dagegen gibt es verschiedene Maßnahmen - such dir eine aus:
- merk dir die aktuelle Anzahl an Einträgen und ignorier alles darüber hinaus
- setze den duplizierten Listeneintrag auf 'leer' (z.B. kundennr=0)
- verwende eine (doppelt verkettete) Liste für deine Datenspeicherung
- ...
- (oder steig um auf C++ und arbeite mit STL-Containern)