25. april 2003 - 09:11
Der er
7 kommentarer og 1 løsning
Slet i en struct...
Hej jeg har en struct, som se sådan ud: struct bruger_info { char STbruger[40]; char STkortnummer[40]; char STkode[40]; struct bruger_info *naeste; }; struct bruger_info *foerste, *sidste, *ny; Der har jeg så smidt en par linier ind i. Men nu skal jeg slette den ene af dem, og jeg har kun STbruger. Den skal altså slette STbruger, STkortnummer & STkode for den pågældene.
Annonceindlæg fra DE-CIX
25. april 2003 - 09:17
#1
ups det skal være i c...
25. april 2003 - 09:23
#2
Det er jo en envejs kædet liste. Du starter fra starten og følger links indtil du har fundet den der skal fjernes og så sætter du den foregåendes naeste til den fundnes naeste. (og deallokerer memory)
25. april 2003 - 09:24
#3
wov, hvordan mener du man skal gøre dette ??
25. april 2003 - 09:26
#4
Noget i retning af: struct bruger_info *prev,*curr; prev=null; curr=foerste; while(strcmp(curr->STbruger,"anders and")!=0) { prev=curr; curr=curr->naeste; } if(prev!=NULL) { prev->naeste=curr->naeste; free(curr); } else { foerste=curr->naeste; free(curr); }
25. april 2003 - 09:38
#5
Jeg har smidt dette ind: int sletbruger() { struct bruger_info *prev,*curr; char soegte_navn[81]; prev=NULL; curr=foerste; printf("Skriv navnet på vedkommet du vil havde slettet"); scanf("%s", soegte_navn); while(curr != NULL) if(strcmp(curr->STbruger, soegte_navn) != 0) { prev=curr; curr=curr->naeste; printf("1"); } if(prev != NULL) { prev->naeste=curr->naeste; free(curr); } else { foerste=curr->naeste; free(curr); } return 0; } men den kommer med en beskyttelse fejl nå jeg kører det.. :( Hvis man taster 8 indslag, ind / eller hvis man taster ole, som der en bruger som hedder.
25. april 2003 - 09:47
#6
Altså koden kan kun håndtere situationen hvor der faktisk er et match. Hvis den skal kunne håndtere ikke match, så skal den ændres til f.eks.: if(forest==NULL) return; prev=NULL; curr=foerste; if(strcmp(curr->STbruger, soegte_navn) != 0) { prev=curr; curr=curr->naeste; if(curr==NULL) return; }
25. april 2003 - 09:48
#7
Men hvis den er der burde det virke. Jeg prøver lige at lave et eksempel.
25. april 2003 - 10:00
#8
Det her ser ud til at virke: #include <stdio.h> #include <string.h> #include <stdlib.h> struct bruger_info { char STbruger[40]; char STkortnummer[40]; char STkode[40]; struct bruger_info *naeste; }; struct bruger_info *foerste = NULL; struct bruger_info *sidste = NULL; void add(char *bruger, char *kortnummer, char *kode) { struct bruger_info *ny = (struct bruger_info *) malloc(sizeof(struct bruger_info)); strcpy(ny->STbruger, bruger); strcpy(ny->STkortnummer, kortnummer); strcpy(ny->STkode, kode); ny->naeste = NULL; if(sidste!=NULL) { sidste->naeste = ny; sidste = ny; } else { foerste = ny; sidste = ny; } return; } void delete(char *bruger) { struct bruger_info *prev,*curr; if(foerste==NULL) return; prev=NULL; curr=foerste; while(strcmp(curr->STbruger,bruger)!=0) { prev=curr; curr=curr->naeste; if(curr==NULL) return; } if(prev!=NULL) { prev->naeste=curr->naeste; free(curr); } else { foerste=curr->naeste; free(curr); } return; } void show() { struct bruger_info *curr = foerste; while(curr!=NULL) { printf("%s\n",curr->STbruger); curr=curr->naeste; } return; } int main() { add("ole", "xxx", "xxx"); add("jens", "xxx", "xxx"); add("niels", "xxx", "xxx"); add("peter", "xxx", "xxx"); show(); delete("jens"); delete("nobody"); show(); }
Kurser inden for grundlæggende programmering