Van egy otthoni munka, amely majdnem kész, de én ragadt somewhere.I kell figyelmeztetni, hogy ez az első alkalom, én vagyok segítségével mutatókat és ezek mind furcsa dolgok így vagyok elveszett. Célom az, hogy olvasni egy txt diákok adatok listát (Név Név ID). A trükk az, hogy azt kell használni egy bináris keresési fa tárolja a vezetéknevek (ezt tettem), és olyan belső az első fát egy másik bináris keresési fa, amely tárolja az első a tanulók neve és azonosítója (Részben kész). A probléma az, hogy amikor néhány diák azonos eredetű és különböző utónév i ne hozzon létre egy új csomópont a vezetéknevű de azt kell tenni az új hallgatók első nevét és id belül meglévő csomópont utolsó név. Meg kell, mint: Cameron James 12131313
Andrew 17286378 (a családi is Cameron)
A kód:
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 *);
A fő hívom a loadData () importálja a diákok
loadData(&temp);
És loadData () függvény
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);
}
Hívom a add_node (), amely be egy új csomópont a fő (családi) fa. Ez alo működik ..
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;
}
A problémám kezdődik (topname = add_node_nameANDid (topname, Temp2)), amely egy functon mint add_node (), de hozzáteszi új nameANDid csomópontokat, ha a hallgatók azonos vezetéknév .. nem tudom, milyen érveket használni ... utálom mutatókat, mert én nem tapasztaltam a saját használatra (nem nedves legalább) ... És a add_node_nameANDid () függvény
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;
}
A add_node_nameANDid () i igyekezett hasonló változókat, hogy könnyebb legyen megérteni őket .. Hogyan kell használni a mutatók a add_node_nameANDid (), mert amikor én copmpile ez azt mondja [Warning] elhaladó arg 1 `add_node_nameANDid” inkompatibilis mutató típus Sorban
topname->nleft=add_node_nameANDid(topname->nleft,temp);}(in add_node_nameANDid())
vagy nem kompatibilis típusú argumentum 2 `add_node_nameANDid”
topname=add_node_nameANDid(topname,temp2);}
mikor hívja a add_node_nameANDid () re add_node ().
Tud szíves valaki segítsen nekem ez a rendetlenség?













