Jeg har et hjem arbeid som er nesten ferdig, men jeg har fast somewhere.I må advare at det er første gang jeg bruker pekere og alle disse rare ting så jeg er ganske vill. Min hensikt er å lese fra en txt studenter dataliste som (etternavn Navn ID). Trikset er at jeg må bruke en binært søketre for å lagre etternavn (jeg har gjort dette), og for å skape inne i første treet annet binært søketre som lagrer de første navnene på studentene og ID (delvis komplett). Problemet er at når noen student har samme etternavn og annet fornavn jeg må ikke opprette en ny node for etternavn, men jeg må sette de nye studentene fornavn og id inni en eksisterende node etternavn. Det bør være like: Cameron James 12131313
Andrew 17286378 (hans etternavn er også Cameron)
Koden er:
typedef struct nameANDid{
char first[20];
int ID;
struct node *nleft;
struct node *nright;
}yohoho;
typedef struct node{
char last[20];
struct nameANDid yohoho;
struct node *left;
struct node *right;
}node;
///
struct node temp;
struct nameANDid temp2;
struct node *top=NULL;
struct nameANDid *topname=NULL;
void loadData();
struct nameANDid * add_node_nameANDid(struct nameANDid *, struct nameANDid *);
/////
struct node * add_node (struct node *, struct node *);
struct node * search_node (struct node *, char *);
void print_node (struct node *);
void print_tree (struct node *);
I hoved jeg kaller loadData () for å importere studentene
loadData(&temp);
Og loadData () er
void loadData(struct node *temp){
int i;
FILE *fp;
fp=fopen(FILENAME,r);
if (fp == NULL) printf(File does not exist\n);
for (i=0; i<20; i++){
fscanf(fp,%s,&temp->last);
fscanf(fp,%s,&temp->yohoho.first);
fscanf(fp,%d,&temp->yohoho.ID);
top=add_node(top,temp);
}
fclose(fp);
printf(\n\nFile loaded\n);
}
Jeg kaller add_node () som setter inn en ny node i min main (Etternavn) treet. Dette alo fungerer ..
struct node * add_node (struct node *top, struct node *temp){
struct node *newNode;
if (top == NULL){
newNode=(struct node *)malloc(sizeof(struct node));
temp->left=NULL;
temp->right=NULL;
if (memcpy(newNode,temp,sizeof(struct node)) == NULL) {
printf(Node addition failed\n);
return NULL;}
else {
//printf(Node added\n);
return newNode;}
}
else {
if (stricmp(temp->last,top->last) < 0){
// printf(left\n);
top->left=add_node(top->left,temp);}
else if (stricmp(temp->last,top->last) == 0){
// printf(Last names are equal\n);
topname=add_node_nameANDid(topname,temp2);} //Here is one of my problems
else {
// printf(right\n);
top->right=add_node(top->right,temp);}
// printf(Node added\n);
return top;
}
return NULL;
}
Mitt problem starter med (topname = add_node_nameANDid (topname, temp2);) som er en functon som add_node (), men hun legger til nye nameANDid noder om studentene har samme etternavn .. Jeg vet ikke hva argumenter for å bruke ... jeg hater pekere fordi jeg ikke er erfaren med deres bruk (ikke våt minst) ... Og add_node_nameANDid () er
struct nameANDid * add_node_nameANDid (struct nameANDid *topname, struct nameANDid *temp){
struct nameANDid *newNode_nameANDid;
if (topname == NULL){
newNode_nameANDid=(struct nameANDid *)malloc(sizeof(struct nameANDid));
temp->nleft=NULL;
temp->nright=NULL;
if (memcpy(newNode_nameANDid,temp,sizeof(struct nameANDid)) == NULL){
printf(Node addition failed\n);
return NULL;}
else {
//printf(Node added\n);
return newNode_nameANDid;}
}
else {
if (stricmp(temp->first,topname->first) <= 0){
// printf(leftname\n);
topname->nleft=add_node_nameANDid(topname->nleft,temp);}
else {
// printf(rightname\n);
topname->nright=add_node_nameANDid(topname->nright,temp);}
// printf(Node added\n);
return topname;
}
return NULL;
}
I add_node_nameANDid () jeg prøvde å bruke tilsvarende variabler for å være lettere å forstå dem .. Hvordan bør jeg bruke pekere i add_node_nameANDid () fordi når jeg copmpile det står det [Advarsel] bestått arg en av `add_node_nameANDid' fra uforenlige pekertype på linje
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
eller inkompatibel type for argument 2 av 'add_node_nameANDid'
topname=add_node_nameANDid(topname,temp2);}
Når jeg kaller add_node_nameANDid () fra add_node ().
Kan ta noen hjelpe meg med dette rotet?













