DVD Regal in C mit verketteter Liste

elektro2

Cadet 4th Year
Dabei seit
Feb. 2014
Beiträge
67
Hallo Zusammen...

Ich wollte ein dynamisches DVDregal erstellen...

Nur irgendwie funktioniert die Eingabe unschön und zur Ausgabe kommt es erst gar nicht..

Wo ist der Fehler ??

Schonmal vielen Dank für Eure Antworten :)))

Code:
*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAX 30

typedef struct dvd{
	
		char dvdname[MAX];
		int erscheinungsjahr;
		struct dvd *next;
		
}dvd;



dvd * start;
dvd * benno;



void add (void)
{	
	int i;
	int anzahl;
	
	start=NULL;
	benno=NULL;
	
	printf("Wieviele DVDS wollen sie hinzufügen ? \n");
	scanf("%d",&anzahl);
	
	for(i=1;i<=anzahl;i++)
	{
		benno=(dvd*)malloc(sizeof(dvd));
		
		printf("%d. dvd namen eingeben",i);
		fgets(benno->dvdname,MAX,stdin);
		getchar();
		printf("Erscheinungsjahr der %dten DVD eingeben \n", i);
		do{scanf("%d",&benno->erscheinungsjahr);} while (getchar()!='\n');
		
	
		
		
		
		benno->next=start;
		benno=start;
			
	}	
}

void ausgeben (void){  
      
        benno=start;
	while(benno!=NULL)
	{
		printf("DVD Name :%s",benno->dvdname);
		printf("DVD Erschwinungsjahr :%d",benno->erscheinungsjahr);
	}
	
	benno=benno->next;
	
}

int main(void ) {
	
      add();
     ausgeben();


	return 0;
}
 
Zuletzt bearbeitet:

asdfman

Commander
Dabei seit
März 2008
Beiträge
2.315
Was hast du schon zur Diagnose versucht? Debugger? Kennst?
 

elektro2

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
67
kenn ich leider nicht .. nur vom namen her.. ich bin noch anfänger.. der code ist für mich eher schon komplex :)
 

Blublah

Lt. Commander
Dabei seit
März 2009
Beiträge
1.592
benno=benno->next;

muss in die Schleife:

while(benno!=NULL)


oder

for (benno=start; benno; benn=benno->next)
 

elektro2

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
67
ok danke .. ich bau es schonmal ein und gucke, was herauskommt :)
 

Blublah

Lt. Commander
Dabei seit
März 2009
Beiträge
1.592
und dann ist die Verkettung am Anfang nicht richtig. start und next werden falsch gesetzt
 

elektro2

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
67
ausgabe geht immer noch nicht -.- Programm bricht leider nach der "unsauberen " Eingabe ab
 

Blublah

Lt. Commander
Dabei seit
März 2009
Beiträge
1.592
start darf nur bei start == 0 gesetzt werden.

fuer den rest brauchst du sowas wie last_benno um dann last_benno->next auf benno zu setzen. und benno->next wird zuerst auf 0 gesetzt.
 

Aliosy

Ensign
Dabei seit
Feb. 2013
Beiträge
149
Zuweisung
28. start=NULL;
29. benno=NULL;


genau hier ist der Fehler
48. benno->next=start;
49. benno=start;

Hier überschreibst du immer den Pointer Benno mit NULL


"Start" muss immer auf das erste Element "Benno" zeigen, und das nur ein mal!
if( start == NULL )
{ start = Benno; }
 

elektro2

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
67
oh man ziemlich kompliziert... könntest du vielleicht den Code verbessern, damit ich sehe, wo meine Fehler sind. Ich wäre dir tausendfach dankbar :)
Ergänzung ()

also so wie ich das verstanden habe, muss doch benno->next immer =NULL sein, weil es doch auf das nächste element zeigt. Wenn ich jetzt z.b das dritte Element hinzufüge, dann habe ich ja noch kein viertes. d.h benno->next=NULL
 

Blublah

Lt. Commander
Dabei seit
März 2009
Beiträge
1.592
start=NULL;
benno=NULL;
previous=NULL;


for ...

benno = malloc ...

memset(benno, 0, sizeof(dvd)); // alles mit 0 initialisieren

if (!start) start = benno;

if (previous) previous->next = benno;
previous = benno;

printf ...
 

elektro2

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Feb. 2014
Beiträge
67
es tut mir nochmal leid, dass es so rüberkommen würde, als wäre ich faul. Ich weiß nicht, ob das normal ist, aber ich bin eher der mathematisch/technisch angehauchte typ und komischerweise fällt mir c wirklich schwer. ich habe schon viel Zeit für diese " BASICS" investiert, doch es will irgendwie nicht in meinen kopf rein:/

danke für den beitrag blublah :)
 
Top