Brauche Hilfe ich versteh nicht wie das geht
-
Hallo ich bins mal wieder xD
sitze immernoch an der blöden Übung und komme bei einer Funktion nicht weiter es geht um verkettete Liste und ich häng bei dem Punkt:b)
Element hinzufügen der Speicherplatz für ein neues Wort wird erstellt und das Wort eingegeben. Es wird gefragt, vor welchem Element das neue Wort eingefügt werden soll.Hier ist mein bisheriger Code:
#include <stdio.h> #include <string.h> #include <conio.h> #include <stdlib.h> struct eintrag //Deklaration eines Listenelements { char wort[20]; struct eintrag *next; }; typedef struct eintrag element; struct eintrag *liste; //Zeiger auf den Anfang der Liste void erstellen (element* ptr); //Funktionen void anzeigen (element* ptr); void hinzufügen (element* ptr, char[20], char[20]); int main () { int Auswahl; do { system("cls"); if (liste != NULL) {anzeigen (liste);} printf ("HAUPTMENUE:\n1 - Liste erstellen\n2 - Element hinzufuegen\n3 - Element loeschen\n4 - Programm beenden\nBitte waehlen Sie: "); Auswahl = getche(); if (Auswahl == '1') { system ("cls"); liste = (element*)malloc(sizeof(element)); erstellen (liste); } else if (Auswahl == '2') { char neueswort[20]; char vorwort[20]; printf ("\n\nNeues Element eingeben: "); scanf ("%s", &neueswort); printf ("\nVor welchem Element soll %s gespeichert werden: ", neueswort); scanf ("%s", &vorwort); system ("cls"); hinzufügen(liste, neueswort, vorwort); } else if (Auswahl == '3') { system ("cls"); } printf ("\n\n"); } while (Auswahl != '4'); return 0; } void erstellen (element* ptr) //Funktion zum Erstellen einer neuen Liste { printf("Wort eingeben ('ENDE' fuer Ende der Liste):"); scanf("%s",ptr->wort); if(strcmp(ptr->wort,"ENDE")==0) {ptr->next=NULL;} else { ptr->next = (element*) malloc(sizeof(element));erstellen(ptr->next); } return; } void anzeigen (element* ptr) //Funktion zum anzeigen der Liste { if (ptr->next != NULL) { printf ("%s\n",ptr->wort); anzeigen (ptr->next); } return; } void hinzufügen (element* ptr,char* neueswort, char* hinterwort) { if (ptr -> wort != NULL) { if (strcmp(hinterwort, ptr->wort) == 0) //Wort ist in der Liste { printf ("wurst");getchar();getchar();getchar();getchar(); } else if ((ptr ->next == NULL) && (strcmp(hinterwort, ptr -> wort) != 0)) //Wort ist nicht in der Liste { printf ("Das eingegebene Wort ist nicht in der Liste");getchar();getchar();getchar();getchar(); } else if (ptr -> next != NULL) //Wenn nächster Zeiger nicht NULL ist wird die Funktion wieder aufgerufen { hinzufügen (ptr -> next, neueswort, hinterwort); } } else if (ptr -> wort == NULL) {printf ("Es befinden sich keine Elemente in der Liste");getchar();getchar();getchar();getchar();} }
Ich versteh nicht wie man mittendrin ein Wort hinzufügt, bei mir hat es nur am Ende geklappt
Kann mir jemand helfen ? bitte
-
Guten Morgen.
Mach erstmal ein ordentliches C Programm daraus - das kompiliert ja nicht mal.Zugegeben als Anfänger ist es erstmal schwer, aber:
- conio.h (und damit getche()) ist windowsspezifisch -> raus damit
- system("cls"); cls ist windowsspezifisch! -> ist nicht schön, kann aber bleiben
- hinzufügen() ist kein gültiger Funktionsname -> hinzufuegen()
- Z. 39-42 falscher Typ im scanf() -> Warnungen im Compiler aktivieren
Wenn es mal kompiliert nimmst Du noch Deine Testaus- und eingaben ("wurst", getchar(); getchar(); getchar(); getchar(); ) raus und wählst einen durchgängigen Stil für Deine Blöcke:
if (liste != NULL) {anzeigen (liste);} // oder (besser!) if (Auswahl == '3') { system ("cls"); }
Und dann kann man mal drüberschauen.
Allgemein steigt die Bereitschaft zu helfen, wenn man sehen kann, dass Du Dir etwas Mühe bei der Präsentation Deines Problems gibst.
-
Du musst Zeiger verbiegen.
Mal es dir auf einem Zettel auf.
liste | +----------+ +----------+ +------------+ +---->| wort | +-->|Hinterwort| +-------------->|Weiterhinten| +----------+ | +----------+ | +------------+ | next |--+ | next |--+ | next |--> NULL +----------+ +----------+ +------------+ ptr_neu +----------+ +---->|Neueswort | +----------+ | next |--> NULL +----------+
Und dann zeichne und schreibe auf, was du machen musst, damit der next-Zeiger von Hinterwort auf Neueswort zeigt und der Zeiger von Neueswort dann auf Hinterwort.
Dein anzeigen zeigt das letzte Element der List nicht an.
Und überleg dir mal, ob es wirklich Rekursion sein muss.Und du solltest dir auch über die Namen und die Funktion der Funktionen gedanken machen.
Was soll erstellen machen?
Was soll hinzufuegen machen?
Gibt es da Überschneidungen?
-
@DirkB : Wie machst du die Bilder? "Zeichnest" du die selber, oder hast du da was für?