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:
hierbei werden leider alle eingaben mit der gleichen iterationsvariablen ausgegeben....
wenn ich eine while-schleife nutze, wird aber daraus ne endlosschleife...
done...
to be continued
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:
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.
über gute ratschläge und tipps würde ich mich sehr freuen...
Die Funktion sieht folgendermaßen aus:
Code:
void ausgabe(struct element *start){ int j=0; //Iterationsvariable if(start != NULL){ printf("%d. %s\n", j++, start->zeichenkette); ausgabe(start->next); } }
wenn ich eine while-schleife nutze, wird aber daraus ne endlosschleife...
done...
to be continued
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:
Code:
struct element { struct element *next; char *zeichenkette; };
Code:
#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); }
Kommentar