Externe Datei erstellen/lesen



  • CJosef schrieb:

    Lymogry schrieb:

    Hat dann aber immernoch das Problem, dass es eine fixe Größe hat. Ich würd mir die Highscoregröße mitspeichern und dann auslesen. Also doch malloc.

    Meine Highscoreliste hat aber maximal 10 Einträge. Also doch kein malloc und kein Problem.
    Bätsch :p

    Hauptsache du bist glücklich. ^^



  • Utakata schrieb:

    Des Weiteren verwirrt mich diese Zeile hier doch sehr:

    n=scannen(abc); ? 6=scannen(abc);??

    und dann in der Mainfunktion: int i, direkt drunter aber n=6 mit dem Kommentar, dass das die Anzahl der Namen auf der Liste ist... ?

    Mit einem Gleichheitszeichen wird einer Variable immer der Wert auf der rechten Seite zugewiesen. Das kommt dem mathematischen n:=f(abc) gleich. Nicht umgekehrt. Will man in C logische Gleichheit prüfen, muss man n==f(abc) schreiben.

    Ah, toll! Dann gibts für die Namen also immer noch keinen Speicher! 👍
    -> Crash.

    Er meint, dass in der Struct nur ein char* steht, aber kein char name[10], was einen Speicher für 10 Buchstaben reserviert. In einem char* ist nur Platz für einen Pointer.
    Du musst deine Struct also verändern, du kannst gerne meine nehmen, aber keine Sorge, danach muss du keine Fkt umschreiben. Nur jedes deiner struct highscore mit einem HIGHSCORE ersetzen.
    Das Typedef erlaubt es dir, für struct sHIGHSCORE einen neuen kürzeren Namen zu definieren, also HIGHSCORE. Ist einfach übersichtlicher.

    Wobei ich anschließend nicht sicher wüsste, wie ich die anderen Funktionen umbaue und welche werte ich dann unten in der Main an die Funktionen weitergeben muss bzw. was ich in die Klammern schreiben muss bei z.Bsp. speichern(?);
    Einfach nur abc? X.x Eben probiert... -zig Fehlermeldungen.
    Mensch, muss ich denn unbedingt alles umbauen? Wenn ja, kann man es mir bitte möglichst einfach erklären? Wie gesagt, ich arbeite erst seit etwas über einer Woche mit C.

    Du schreibst dir oben deine Funktion z.b. int scannen(HIGHSCORE abc);
    Damit gibst du an, dass deine Funktion scannen eine Integerzahl zurück gibt. Das hab ich in meinem Beispiel mit n=scannen(abc) abgefangen und dann ausgegeben.
    In den Klammern steht, welche Variablen die Funktion erwarten muss. Bei mir steht ein HIGHSCORE
    Element. Das heißt, die Funktion kann einen Pointer auf einen Datentyp HIGHSCORE erwarten.
    Genau das musst du in der main in die Fkt reinschreiben.
    Also scannen(abc), da HIGHSCORE *abc definiert wird. Das Sternchen in der Typdefinition gibt an, welches Dereferenzierungslevel du hast, das heißt, wieviele Pointer du im Speicher durchlaufen musst, um an den Wert des Datentyps zu kommen. Wenn du hinterher nur abc aufrufst, bekommst du den Pointer mit einem Level. Den Eintrag bekommst du mit *abc, das Sternchen derefenziert dann. Wenn du abc[i] aufrufst, bekommst du den derefenzierten Datentypeintrag an i-ter Stelle. Die eckigen Klammern dereferenzieren automatisch!
    Die Funktion scannen(HIGHSCORE *abc) erwartet also einen Pointer mit Deferenzierungslevel 1 und abc hat das, also kommt in der main Fkt nur abc in die Klammern.

    ... Ein gutes Buch/Script kann das sicher besser erklären. 😉


Anmelden zum Antworten