Hilfe! Structs in C

Koenig13

Neuling
Thread Starter
Mitglied seit
23.01.2009
Beiträge
2
Ich habe von unserem Prof. den folgenden Quelltext erhalten:
Code:
#include  <stdio.h>																//header file für Ein-/Augabe
#include  <stdlib.h>															//header file für Standartbibliotheken
#include  <string.h>															//header file für Zeichenfolgen


struct person
{
	char *name;

	
	struct person *nachfolger;
};

typedef struct person person;

person * person_anlegen(char * data)
{
	person *tmp=(person *)malloc(sizeof(person));

	int laenge = strlen(data);
	tmp->name =(char *)malloc(laenge+1);
	strcpy(tmp->name, data);

	tmp->nachfolger = NULL;
	return tmp;
}

void element_einhaengen(person* element, person **listenlink)
{
	element->nachfolger = *listenlink;
	*listenlink = element;
}

void ausgabe(person *liste)
{
	person *zeiger = liste;

	while(zeiger != NULL)
	{
		printf("Name: %s ,\n", zeiger->name);
		zeiger=zeiger->nachfolger;
	}
	printf("Ende \n");
}

void ausgabe_file(person *liste, char * filename)
{
	FILE * file;
	person *zeiger = liste;
	file = fopen(filename, "w+");
	if(file != NULL)
	{
		while(zeiger != NULL)
		{
			fprintf(file, "Name: %s\n", zeiger->name);
			fprintf(file, "#\n");
			zeiger=zeiger->nachfolger;
		}
		fprintf(file,"## \n");
	}
	fclose(file);
}

void einlesen_file(person **listenlink, char * filename)
{
	FILE * file;
	char wort[100];
	file = fopen(filename, "r+");
	if(file != NULL)
	{
		while(fscanf(file, "%s", wort) && strcmp(wort, "##"))
		{
			if(strcmp(wort,"#"))
			element_einhaengen(person_anlegen(wort),listenlink);
		}
	}
	fclose(file);
}

void leeren_file(person **listenlink)
{
	person *zeiger = *listenlink;
	while(zeiger != NULL)
	{
		*listenlink = (*listenlink)->nachfolger;
		free(zeiger->name);
		free(zeiger);
		zeiger = *listenlink;
	}
	*listenlink = NULL;
}





main()
{		
	person *anfang = NULL;
	char wort[20];
	printf("Bitte Namen eingeben:");
	scanf("%20",wort);
	wort[19]=0;
	element_einhaengen(person_anlegen(wort),&anfang);
	
        //ausgabe();
	//ausgabe_file(,"nutzer.txt");
}

Meine Fragen dazu sind:
1. Kann man die Prozeduren problemlos im main() nutzen, oder ist der Quelltext unvollständig.

2. Welche Parameter muss ich den letzten beiden auskommentierten Funktionen übergeben, damit sie funktionieren? Ich hab schon alles ausprobiert was mir eingefallen ist.

Kann mir bitte jemand helfen?
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Du scheinst wohl den Umgang mit verketteten Listen nicht zu beherrschen.

Pass auf:
Deine Struktur ist eine verkettete Liste d.h., das Argument das du übergibst, also die Struktur, hat unter der Variable nachfolger entweder einen Nachfolger(also wieder eine Variable vom Typ person) auf den es zeigt oder NULL

In welchem FB bist du denn? Ist das ein Pflichtschein?

-Michael
- der jetzt wohl seine Mathe Vorlesung schwänzen wird ^^
 
http://en.wikipedia.org/wiki/Linked_list#Singly-linked_list

was soll der Sinn der Übung eigentlich sein?
es ist ja sogar schon alles gegeben was eigentlich ne gute übung wäre
das ganze erstellen und verlinken der Linked-List nehmen dir die Funktionen

person * person_anlegen(char * data){...}
void element_einhaengen(person* element, person **listenlink){..}

bereits ab.

wobei die Funktion element_einhaengen unvollständig ist bzw wenn du sie richtig nutzen möchtest, einen Pointer auf das letzte Element der Liste übergeben müsstest!

Außerdem sollte da ein Iterator erstellt werden da du sonst die Speicheradresse des ersten Elements früher oder später verlieren wirst.

so das wäre jetzt das wichtigste das mir jetzt auf die schnelle aufgefallen ist,
mein Tipp, wenn du die Single-Linked-List wirklich verstehen möchtest, programmier es selbst neu!

mfg
aelo
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh