![]() |
C- Doppelt verkettete Liste
Muss bis Dienstag die Hausübung fertig haben, habe aber jetzt schon seit über einem Jahr kein C mehr gemacht so das ich vollkommen draußen bin.
Die aufgabe: eine doppelt verkettete Liste, mit einfügen suchen löschen... Bei mir hängt er im Moment an der Zeile: struct node *temp; Wieso, und kann mir jemand bitte schnell helfen!!! #include<stdio.h> #include<stdlib.h> struct node{ int Katnr; int Ktostand; struct node *prev; struct node *next; }; void insert(int zahl1, int zahl2, struct node *point); void main(){ struct node *root=NULL, *found; char ein[130]; int z1,z2,loop=1,menu; while(loop){ printf("0 Datensatz eingeben\n1 Datensatz suchen\n2 Datensatz l”schen\n3 Beenden\n"); menu=atoi(gets(ein)); switch(menu) { case 0: struct node *temp; printf("\nBitte Katalognummer eingeben: "); z1=atoi(gets(ein)); printf("\nBitte Kontostand eingeben: "); z2=atoi(gets(ein)); if(root==NULL){ root=malloc(sizeof(struct node)); root->Katnr=z1; root->Ktostand=z2; } else insert(z1,z2,root); break; case 3: loop=0; break; default: printf("Bitte gltige Zahl eingeben"); } } } void insert(int zahl1, int zahl2, struct node *point){ if(point->next==NULL){ struct node *new; new = (struct node *)malloc(sizeof(struct node)); new->Katnr=zahl1; new->Ktostand=zahl2; new->prev=point; point->next=new; } else insert (zahl1, zahl2, point->next); } |
eine genaue compiler fehlermeldung wär in so einem fall zwar immer hilfreich, aber in so einem fall würd ich sagen:
in wirklich reinem ansi c darfst nur ganz oben vor der ersten anweisung variablen instanzieren. und innerhalb einer switch/case anweisung ists schon gar nicht erlaubt. |
stimmt, die deklaration habe ich am Anfang der schleife machen müssen, aber jetzt habe ich schon wieder ein anderes Problem:
Beim Einfügen findet er neue Daten die gar nicht existieren, aber struct node *prev = NULL darf ich auch nicht schreiben. #include<stdio.h> #include<stdlib.h> struct node{ int Katnr; int Ktostand; struct node *prev; struct node *next; }; void show(struct node *point); void insert(int zahl1, int zahl2, struct node *point); void main(){ struct node *root=NULL, *found; char ein[130]; int z1,z2,loop=1,menu; struct node *temp; while(loop){ printf("\n\n0 Datensatz eingeben\n1 Datensatz suchen\n2 Datensatz l”schen\n3 Beenden\n4 Datens„tze ausgeben\n"); menu=atoi(gets(ein)); switch(menu) { case 0: printf("\nBitte Katalognummer eingeben: "); z1=atoi(gets(ein)); printf("\nBitte Kontostand eingeben: "); z2=atoi(gets(ein)); if(root==NULL){ root=malloc(sizeof(struct node)); root->Katnr=z1; root->Ktostand=z2; } else insert(z1,z2,root); break; case 3: loop=0; break; case 4: show(root); break; default: printf("Bitte gltige Zahl eingeben"); } } } void insert(int zahl1, int zahl2, struct node *point){ if(point->next==NULL){ struct node *new; new = (struct node *)malloc(sizeof(struct node)); new->Katnr=zahl1; new->Ktostand=zahl2; new->prev=point; point->next=new; } else insert (zahl1, zahl2, point->next); } void show(struct node *point){ if(point!=NULL){ printf("\nKatalognummer: %3d Guthaben: %3d",point->Katnr,point->Ktostand); } else printf("Keine Daten vorhanden"); if(point->next!=NULL){ show(point->next); } } |
Zitat:
Achja beim setzen des rootknoten hast du vergessen prev und next auf NULL zu setzen und beim malloc fehlt dir der Typecast ;) Code:
if(root==NULL){ |
wennst null nicht schreiben darfst, musst dir selber das define machen - also
#define NULL 0 oder du schreibst einfach = 0 statt NULL. dass er daten findet, wenn der pointer irgendwo hin zeigt is auch klar. |
So kann mir jemand sagen was an der Funktiondeklaration:
Zitat:
hier ist der Aufruf: Zitat:
Zitat:
|
bitte um genaue angaben bei welcher zeile der compiler schreit und welche meldung er von sich gibt. das erspart eine menge arbeit!!!
|
in der Funktionsdeklaration, (das was ich ganz oben geposted habe) und die Meldung ist Illegal Expression Syntax.
|
wird der typ node oberhalb der funktion definiert bzw eine datei in der diese definition vorkommt vorher inkludiert?
|
OK dass nächste Problem:
Hier der Source, und die Fehlermeldungen dazu gleich in Quotes darunter. Ps: vorher hatte ich einfach eine } gelöscht :( :heul: :heul: Zitat:
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 05:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag