verkettete Liste speichern/laden



  • Für mich sieht das ganz positiv aus.
    Es wird während des Lesens, jeweils der noch nicht bearbeitete Teil des Inputbuffers angezeigt.
    Das am Ende ein \n steht ist auch erwartet und korrect.
    damit du den Inhalt der einzelnen Elemente sehen kannst, solltest du die PrintZeiger Routine die ich schon mal angesprochen
    habe implementieren.
    Am Ende von data->telnr mußt du noch das \n entfernen
    Frage hast du die Datei mit "rt" oder "rb" geöffnet

    Falls "rt" dann data->telnr[strlen(data->telnr)-1)=0x00;
    Falls "rb" dann data->telnr[strlen(data->telnr)-2)=0x00;

    int ParseOneline(struct person *data)
    {
    printf("data->vname]%s[\n",data->vname);
    printf("data->nname]%s[\n",data->nname);
    ....
    return 0;
    }
    

    Wenn du jetzt in deiner Datei mehrere Zeilen hast sollte für jede beim Lesen diese Ausgabe aus ParseOneLine kommen.
    Es würde sinn machen neben dem Restbuffer auch den jeweils gelesenen Teil anzuzeigen, das ist eine triviale Erweiterung
    von printf.



  • habs mit rb geöffnet, aber der strlen-Befehl funktioniert so nicht. Hast du da einen Schreibfehler drin? Hab nämlich alles Mögliche schon probiert



  • Natürlich die jeweils letzte Runde sollte eine ] sein.

    Hättste aber auch selber anhand der Compiler Meldung korrigieren können



  • So, jetzt funktioniert endlich alles - ich danke dir wie verrückt!!!



  • Das freut mich 😃 😃 😃 😃

    Ich glaube wir haben hier zusammen ein paar Methoden entwickelt, die dir bei der Programmierung helfen.
    Die Methoden haben den Vorteil, das man sie auf beliebige andere Probleme übertragen kann.

    P.S. Es ist erstaunlich wie SteinZeitDebugging helfen kann ("Einstreuen von printf statements in den Code um den aktuellen Zustand zu überwachen." Eine sinnvolle Erweiterung ist diese Debugausgaben in einem logfile zu speichern).

    Viel Spaß 🤡



  • Hi,

    wollte bloß nochmal fragen, ob ich die Liste jetzt auch sortieren könnte, zB einam lnach Name, dann mal nach Strasse usw!? Das sind ja nun alles Strings - kann man sie überhaupt sortieren? Wenn ja, was für einen Befehl nimmt man da?



  • natürlich.

    Primitivste ("nicht wertend gemeint") Lösung ist Erzeuge einen neuen Head Knoten
    suche das größte Element in der alten Liste trag dieses in die neue ein

    Strings auf größer kleiner vergleichen geht lexikalisch mit strcmp, stricmp, strnicmp, strncmp. Diese Funktionen gibts mit diesem oder ähnlichen Namen bei jedem Compiler aber nur strcmp ist meines Wissen Ansi

    stricmp vergleiche ohne auf groß kleinschreibung zu Achten
    strncmp vergleiche die ersten n zeichen zweier Strings
    strnicmp vergleiche case insensitiv dir ersten n Zeichen

    Mehr siehe Handbuch oder Hilfe



  • Ok, hört sich nicht so schwer an - danke dir!



  • Und noch was ... 😉

    kann ich atol auch für floatzahlen nehemen? Ich will nämlich eine Liste machen, wo ein float als zahl drin stehen soll. Wenn ich die Liste wieder lade, will ich dann trotzdem noch mit den zahlen rechnen können.



  • schu dir mal atof an


Anmelden zum Antworten