![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() Registriert seit: 14.11.1999
Alter: 40
Beiträge: 1.429
|
![]() 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); } |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() 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.
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#3 |
Elite
![]() Registriert seit: 14.11.1999
Alter: 40
Beiträge: 1.429
|
![]() 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); } } |
![]() |
![]() |
![]() |
#4 | |
Master
![]() |
![]() 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){ root=(struct node*)malloc(sizeof(struct node)); root->Katnr=z1; root->Ktostand=z2; root->prev=NULL; root->next=NULL; }
____________________________________
__________________ |»»»»»SONIC««««««| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |
|
![]() |
![]() |
![]() |
#5 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() 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.
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#6 | |||
Elite
![]() Registriert seit: 14.11.1999
Alter: 40
Beiträge: 1.429
|
![]() So kann mir jemand sagen was an der Funktiondeklaration:
Zitat:
hier ist der Aufruf: Zitat:
Zitat:
|
|||
![]() |
![]() |
![]() |
#7 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() bitte um genaue angaben bei welcher zeile der compiler schreit und welche meldung er von sich gibt. das erspart eine menge arbeit!!!
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#8 |
Elite
![]() Registriert seit: 14.11.1999
Alter: 40
Beiträge: 1.429
|
![]() in der Funktionsdeklaration, (das was ich ganz oben geposted habe) und die Meldung ist Illegal Expression Syntax.
|
![]() |
![]() |
![]() |
#9 |
Veteran
![]() Registriert seit: 05.04.2002
Beiträge: 331
|
![]() wird der typ node oberhalb der funktion definiert bzw eine datei in der diese definition vorkommt vorher inkludiert?
____________________________________
Wenn es dumm ist aber funktioniert, ist es nicht dumm! |
![]() |
![]() |
![]() |
#10 | ||||||
Elite
![]() Registriert seit: 14.11.1999
Alter: 40
Beiträge: 1.429
|
![]() OK dass nächste Problem:
Hier der Source, und die Fehlermeldungen dazu gleich in Quotes darunter. Ps: vorher hatte ich einfach eine } gelöscht ![]() ![]() ![]() Zitat:
|
||||||
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|