Jessy_87
01-06-2010, 09:59
Wahrscheinlich ist mein Problem recht trivial, aber irgendwie bekomm ich es einfach nicht hin, die Listenelemente über eine Zählvariable auszugeben.
Die Funktion sieht folgendermaßen aus:
void ausgabe(struct element *start){
int j=0; //Iterationsvariable
if(start != NULL){
printf("%d. %s\n", j++, start->zeichenkette);
ausgabe(start->next);
}
}
hierbei werden leider alle eingaben mit der gleichen iterationsvariablen ausgegeben....
wenn ich eine while-schleife nutze, wird aber daraus ne endlosschleife...:dontknow:
done...
to be continued :teach:
Wäre es möglich, wenn mal eben jemand über den Quellcode schaut?
Also ich soll Zeichenketten zeilenweise über stdin einlesen und in dynamisch angeforderte Speicherbereiche übertragen (ans aktuelle Ende der verketteten Liste).
Folgende Struktur soll verwendet werden:
struct element {
struct element *next;
char *zeichenkette;
};
Die Listenelemente sind ebenfalls durch dyn. Speicheranforderung bereitzustellen. Nach Eingabe sollen die Zeichenketten nummeriert ausgegeben werden und vor Beendigung des Proggs sollen alle Speicherbereiche wieder freigegeben werden.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTR_L 60
//Knotendefinition
struct element{
char *zeichenkette; //Speicherzelle
struct element *next; //naechstes Kettenglied
};
int j = 0;
int i = 1;
//Prototypen
struct element *einfuegen(char *puffer);
void ausgabe(struct element *start);
void leeren(struct element *plauf);
int main (int argc, char ** argv){
struct element *start = NULL, *ende = NULL;
char *puffer = (char*)malloc(MAXSTR_L*sizeof(char));
while(fgets(puffer, MAXSTR_L, stdin) != NULL){
puffer[strlen(puffer)-1] = '\0';
j++; //Zähle jeden Eintrag
if(start == NULL){
start = einfuegen(puffer);
ende = start;
}else{
ende -> next = einfuegen(puffer);
ende = ende -> next;
}
}
ausgabe(start);
leeren(start);
system("PAUSE");
return 0;
}
struct element *einfuegen(char *puffer){ //unsortiert
struct element *tmp = (struct element* ) malloc( sizeof(struct element));
tmp -> zeichenkette = (char*)malloc(strlen(puffer)+1);
strcpy(tmp -> zeichenkette, puffer);
tmp -> next = NULL;
return tmp;
}
void ausgabe(struct element *start){
if(start != NULL){
while (i<=j){
printf("%d. %s\n", i, start->zeichenkette);
i++;
ausgabe(start->next);
}
}
}
void leeren(struct element *start){
while(start != NULL){
free(start -> zeichenkette);
leeren(start -> next);
}
free(start);
}
über gute ratschläge und tipps würde ich mich sehr freuen...
Die Funktion sieht folgendermaßen aus:
void ausgabe(struct element *start){
int j=0; //Iterationsvariable
if(start != NULL){
printf("%d. %s\n", j++, start->zeichenkette);
ausgabe(start->next);
}
}
hierbei werden leider alle eingaben mit der gleichen iterationsvariablen ausgegeben....
wenn ich eine while-schleife nutze, wird aber daraus ne endlosschleife...:dontknow:
done...
to be continued :teach:
Wäre es möglich, wenn mal eben jemand über den Quellcode schaut?
Also ich soll Zeichenketten zeilenweise über stdin einlesen und in dynamisch angeforderte Speicherbereiche übertragen (ans aktuelle Ende der verketteten Liste).
Folgende Struktur soll verwendet werden:
struct element {
struct element *next;
char *zeichenkette;
};
Die Listenelemente sind ebenfalls durch dyn. Speicheranforderung bereitzustellen. Nach Eingabe sollen die Zeichenketten nummeriert ausgegeben werden und vor Beendigung des Proggs sollen alle Speicherbereiche wieder freigegeben werden.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSTR_L 60
//Knotendefinition
struct element{
char *zeichenkette; //Speicherzelle
struct element *next; //naechstes Kettenglied
};
int j = 0;
int i = 1;
//Prototypen
struct element *einfuegen(char *puffer);
void ausgabe(struct element *start);
void leeren(struct element *plauf);
int main (int argc, char ** argv){
struct element *start = NULL, *ende = NULL;
char *puffer = (char*)malloc(MAXSTR_L*sizeof(char));
while(fgets(puffer, MAXSTR_L, stdin) != NULL){
puffer[strlen(puffer)-1] = '\0';
j++; //Zähle jeden Eintrag
if(start == NULL){
start = einfuegen(puffer);
ende = start;
}else{
ende -> next = einfuegen(puffer);
ende = ende -> next;
}
}
ausgabe(start);
leeren(start);
system("PAUSE");
return 0;
}
struct element *einfuegen(char *puffer){ //unsortiert
struct element *tmp = (struct element* ) malloc( sizeof(struct element));
tmp -> zeichenkette = (char*)malloc(strlen(puffer)+1);
strcpy(tmp -> zeichenkette, puffer);
tmp -> next = NULL;
return tmp;
}
void ausgabe(struct element *start){
if(start != NULL){
while (i<=j){
printf("%d. %s\n", i, start->zeichenkette);
i++;
ausgabe(start->next);
}
}
}
void leeren(struct element *start){
while(start != NULL){
free(start -> zeichenkette);
leeren(start -> next);
}
free(start);
}
über gute ratschläge und tipps würde ich mich sehr freuen...

