Einfach verkettete Listen
-
Hallo,
ich bin mal neu hier und hoffe einmal auf eine gute zusammenarbeit. Wir machen derzeit einfach verkettete Listen (in der schule) ich bin ned auf der uni. Da wollte ich fragen ob ihr mal vl so nett wäret mein c Programm durchforsten zu können, was da so falsch ist. Ich erstelle mal die Liste das funktioniert auch mal. Aber wenn ich ein Wort in der Liste löschen will das größer ist als mein suchendes dann gibt es mir gar nichts mehr aus.
//stefan //01.10.2007 //mein zweiter Versuch mit C in diesem Jahr /*Zu verwenden ist wieder unsere Datei Worte.txt Eingegeben wird ein Wort und ausgegeben sollen alle Worte werden, die aus der Buchstabenmenge des Eingabewortes gebildet werden können. Zwischen Groß- und Kleinbuchstaben wird nicht unterschieden.*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <malloc.h> #include <string.h> typedef struct wort //Listenelement für eine verk. Liste { int nummer; char inhalt[50]; struct wort *next; } knoten; // kürzere Schreibweise für dieses struct FILE *fp; void fileoeffnen(); void einlesen(); knoten* knotenanlegen(int,char []); knoten* loeschen(); void fileclose(); void ausgabe(knoten*); void vergleich(); //Globale Variablen knoten *head=NULL; knoten *hlp; int main(int argc, char *argv[]) { fileoeffnen(); einlesen(); fileclose(); printf("\n"); system("Pause"); } void fileoeffnen() { fp=fopen("worte.txt","r"); if(!fp) { printf("Datei nicht o.k.\n"); system("Pause"); // auch getch() möglich exit(1); } } void einlesen() { char puffer[50]; //puffer zum einlesen der Liste und suchen für das suchenede Wort int nr=0; //Nummer für die Wortanzahl while (!feof(fp)) //Solange das ende vom File { fgets(puffer,50,fp); //Das Wort einlesen in puffer hlp=knotenanlegen(nr,puffer); //Übergibt nr und puffer in die Funktion Knotenanlegen und hlp kriegt den wert zurück head=hlp; //ausgabe(head); head->next=NULL; nr++; } vergleich(); } void vergleich() { char suchen[50]; printf("Geben Sie das Wort ein, was Sie suchen!\nWort: "); gets(suchen); printf("\n"); while(head) { if(strlen(head->inhalt) <= strlen(suchen)) head=head->next; /*else { head->next; free(hlp); }*/ head = head->next; ausgabe(head); } } knoten *knotenanlegen(int nr, char puffer[]) { knoten *hilfsknoten; //Ein Pointer hilfsknoten=(knoten*)malloc(sizeof(knoten)); //Speicher vorreservieren strcpy(hilfsknoten->inhalt,puffer); //Den Inhalt von Puffer in die Liste speichern hilfsknoten->nummer=nr; //Den Inhalt von nr in die Liste speichern hilfsknoten->next=NULL; //Next auf Null setzen return hilfsknoten; //Next zurück liefern } void fileclose() { fclose(fp); } void ausgabe(knoten* head) { while(head) { printf("%d. %s",head->nummer,head->inhalt); head=head->next; } }
-
c Programm
Wir sind hier im C++-Unterforum ...
typedef struct word { unsigned int id; char content[50]; struct word* next; } node; bool read_contet(FILE* file_ptr); node* create_node(unsigned int id, char* data); node* search_node(const char* data); node* search_node(unsigned int id); node* g_first = NULL; int main(int argc, char *argv[]) { FILE* file_ptr = fopen("words.txt", "r"); if (file_ptr == NULL) { printf("FEHLER: Datei \"words.txt\" konnte nicht gefunden werden!"); return 1; } if (read_content(file_ptr) == false) { printf("FEHLER: Datei \"words.txt\" beschädigt!"); return 2; } fclose(file_ptr); printf("Daten eingelesen!"); for (node* item = g_first; item != NULL; item = item->next) printf("ID: %d Data: \"%s\"", item->id, item->content); printf("\"Affe\" suchen ..."); node* search = search_node("Affe"); if (search == NULL) printf("\"Affe\" nicht gefunden!"); else printf("\"Affe\" steht an Stelle %d", search->id + 1); system("pause"); } bool read_content(FILE* file_ptr) { char buf[50]; for (unsigned int i = 0; !feof(file_ptr); ++i) { fgets(buf, 50, file_ptr); create_node(i, buf); } } node* create_node(unsigned int id, char* data) { node* result = (node*) malloc(sizeof(node)); if (result == NULL) return NULL; strncpy(result->content, data, 50); result->id = id; result->next = NULL; node* cur = g_first; while (cur) cur = cur->next; cur = result; return result; } node* search_node(const char* data) { node* tmp = g_first; while (tmp) { if (strcmp(tmp->content, data) == 0) return tmp; tmp = tmp->next; } return NULL; } node* search_node(unsigned int id) { node* tmp = g_first; while (tmp) { if (tmp->id == id) return tmp; tmp = tmp->next; } return NULL; }
... so dein Programm einmal aufgeräumt ... du musst jetzt nurnoch deinen Speicher wieder freigeben!
-
ich hab gedacht das ist C/C++ sry gibt es kein c unterforum? und das ist nun aufgeräumt in form von C? danke dir einmal das du dir mein problem angenommen hast. ich schaus mir mal an was du den da alles verändert hast, sieh ich ned so schnell.
mfg Hofnarr
//edit wenn ichs starten will unter dev cpp funkt es nicht?
-
hofnarr schrieb:
ich hab gedacht das ist C/C++ sry gibt es kein c unterforum?
Klar gibt es das - das Board nennt sich "Ansi C".
(und dort landet dein Thread jetzt auch)
-
Dieser Thread wurde von Moderator/in CStoll aus dem Forum C++ in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.