DVD Regal in C mit verketteter Liste

elektro2

Cadet 4th Year
Registriert
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:
Was hast du schon zur Diagnose versucht? Debugger? Kennst?
 
kenn ich leider nicht .. nur vom namen her.. ich bin noch anfänger.. der code ist für mich eher schon komplex :)
 
ok danke .. ich bau es schonmal ein und gucke, was herauskommt :)
 
ausgabe geht immer noch nicht -.- Programm bricht leider nach der "unsauberen " Eingabe ab
 
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.
 
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; }
 
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
 
elektro2 schrieb:
könntest du vielleicht den Code verbessern

Nicht dein Ernst jetzt, oder? Lern die Sprache, lern einen Debugger zu benutzen oder nenne deinen Preis, den du zu zahlen bereit bist.
 
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 ...
 
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 :)
 
Zurück
Oben