Dringede Frage zu Fread/Fopen!



  • Hallo Zusammen,

    vorab: IHR SEID MEINE LETZTE HOFFNUNG!
    ich habe nun zig Leute gefragt, die vermeindlich Ahnung von C haben, aber keiner konnte mir helfen. Konkret, ich muss bis Montag eine Programmieraufgabe in nem Nebenfach abgeben, und krieg den letzten Punkt auf meiner "das muss es können"-Liste nicht hin.

    Es handelt sich um ein Programm, welches eine Liste für CD´s erstellt, besipielsweise für einen CD-Verleih ( typische total realistische aufgabe 🙄 ) Wir müssen mit Zeigern alles machen und Programmieren mit ner Vorkriegs Borland BC31 Version. Somit ist da auch nicht viel mit Hilfe zu machen.

    Ich kriege es Mittlerweile hin Datensätze zu speichern, allerdings bekomme ich sie nichtmehr zurück ins Programm geladen. Ich wär euch unendlich dankbar wenn ihr vielleicht meinen Fehler sehen könntet und Nachsicht habt, das wir nie richtig einrücken gelernt haben, da es sich eben nur um nen "Nebenkurs" handelt, aber bestehen muss man halt trotzdem und es fuchst mich irsinnig das ichs nicht hinkriege.

    Ich habe den Quellcode mal ins PasteBin geladen.
    http://pastebin.com/rU10YVbM

    Ich hoffe ihr könnt mir helfen! 😞

    Grüße Tobias



  • Wenn du die Daten wieder einliest, dann landen sie nicht wieder an der gleichen Speicherstelle und daher sind die ganzen next -Pointer alle ungültig. Du musst also die Strukturen einzeln einlesen und den next -Pointer neu setzen.



  • müsste ich dann aber nicht auch die strukturen einzeln abgespeichert haben? mit fwrtie, schreibt er ja alles in eine Zeile in meine .txt datei. mit welchem Befehl kann ich daraus dann einzeln die structuren auslesen? mit fgets?



  • Aus deinen Codeteilen lässt sich vernünftig kein Fehler ablesen, da unvollständig und natürlich nicht standardkonform; ich wusste gar nicht, dass BC31 schon C99 kann, wahrscheinlich hast du es als C++ compiliert, geht das wenigstens mit dem Compiler standardkonform?
    - u ist nicht initialisiert
    - start zeigt auf einen uninitialisierten Speicherbereich
    - du verwendest wahrscheinlich verkettete Listen, die kann man (wie noch andere Selbstverständlichkeiten) nicht einfach speichern und wieder lesen (Professorenschrott)
    - formatiere deinen Code mal vernünftig
    - nutze codepad.org oder ideone.com
    - ...



  • Danke für deine Antwort,

    vermutlich habe ich falsch gepostet hier... ob das nun C89 oder C99 ist weiß ich leider nicht, da wir eben nur son paar grundzüge das gesagt bekommen haben und dann mit nem dürftigen skript im regen stehen gelassen wurden.

    Ich habe nun das Speichern soweit verändert das ich Zeilenweise und ncihtmehr Blockweise speichere. Das sieht in der .txt Datei auch ordentlich und vernünftig aus und wenn ich dann meine Datei mit einer Whileschleife und fputs anzeige, listet er mir auch schön alles auf. Nur den Zeigerkram ums wieder zuzuordnen pack ich jetzt nichtmehr. aber ich glaube da könnt ihr mir nicht allzuviel helfen.

    Compilieren geht soweit ich weiß allerdings nur als C, das BC31 kann glaube ich garnichts anderes?! Wir haben einfach oben auf compile und dann Run gedrückt... 😃

    Und ja, bei der CD Liste, handelt es sich um eine einfach verkettete Liste. Die habe ich nun mit fprintf zeilenweise gespeichert.

    Habe nun mal mein gesamtes programm ins Codepad gestellt. Ich denke aber da wird keiner draus schlau,... würd ich auch wahrscheinlich nicht, weils halt von Anfängern geschrieben wurde und ich wie gesagt nichtmal weiß wie man ordentlich einrückt. Das laden habe ich nun auskommentiert, weil das so in der Form nicht tut und ich da eigentlich nur rumprobiert habe.

    Grüße und danke, Tobias

    Hier noch der Code: http://codepad.org/sMZy7FFr



  • Weiss nicht ob es den BC3.1 auch in deutsch gab. Meiner Erinnerung nach hiess der BCC3.1. Siehe in deiner Borland IDE unter: help -> about 👍
    Die C-Version sollte TC3.0 heissen, wenn es eine gab.

    Wenn du den Quelltext als C übersetzt, hast du ab etwa der Hälfte der Quelltextzeile mehrere Fehler ⚠
    Als CPP-Quelltext sind da nur noch Warnungen. Aber auch um die sollte man sich nach Möglichkeit kümmern.

    Jetzt wissen wir nicht wie das bei euch gehandhabt wird? Ob von euch strickt Borland C verlangt wird oder Borland C++?

    MfG f.-th.



  • Wer das nach vollziehen will - der free bcc 5.5 sollte den Quelltext auch verstehen.

    Hier mal ein Link zu jemand der ähnliche Probleme hatte:
    http://www.c-plusplus.net/forum/257977

    MfG f.-th.



  • Da steht:

    Borland C++
    V3.1
    (c)1990



  • C++ <= also kann dein Compiler C und C++ Quelltexte übersetzen.
    Da du deinen Quelltext als C++ gespeichert hast akzeptiert der Borland CPP den Quelltext im C++ Stil.
    Wenn du den als C-Quelltext speicherst und da der Compiler C99 bei den angebenen Positionen noch nicht beherrscht, zeigt er dir in dem Fall etwa 10 Fehler.

    Deshalb die Frage wie handhabt ihr das im Unterricht? Speichert ihr den Quelltext als C oder C++ 😕

    Denn es ist ein Unterschied ob du in deiner Arbeit 0 oder 10 Fehler hast vermute ich. Um von dem Quelltext reinen oldschool Borland C zu machen musst du nur ein paar Zeilen tauschen. Oder akzeptiert euer Lehrender die von dir gezeigte Variante 😕

    MfG f.-th.



  • Wie man sowas richtig macht, sieht man z.B. hier:

    http://ideone.com/VUh10

    Der ganze conio Müll ist natürlich draußen, wenn du die Basisfunktionalitäten deines Programms fehlerfrei hinbekommen hast, kannst du dich anschließend noch darum kümmern.
    Wie man sieht, werden sogar die erwähnten Zeiger verwendet, aber nicht als verkettete Liste sondern ohne diese unselige Verkettung und kann klappt es auch einfach mit Speicher/Lesen in Dateien.
    Ein paar Speicherlecks sind noch drin, ebenso habe ich auf Fehlerbehandlung (Datei,...) mal verzichtet.
    Wenn du die Zeigeroperationen verstanden hast, dann kannst du auch C programmieren (vielleicht im Gegensatz zu deinem Lehrer).



  • Ich bin beeindruckt...
    Das sieht besser aus als meins!

    Mein Prof. akzeptiert das so von uns. Wir haben wie gesagt einfach bei der vorliegenden borland version einfach compile gedrückt und das musste reichen.
    Ich hab nun das Zeileweise Speichern so gelassen und das laden nun eben nciht. morgen ist abgabe. Da das programm an sich läuft und nur das laden nicht ganz rein ist, denke ich das er mir schon keinen Strick draus drehen wird da einige komolitonen nichtmal das ändern hinbekommen haben.
    Danke für eure Hilfe. Nun hab ich wenigstens mal gesehn wie meine Code richtig eingerückt aussieht.
    Die Funktionen mit den zeigern die du da verwendet hast vereinfachen den code immens, allerdings mussten wir zu lehrzwecken gewisse Funktionen und Strukturen verwenden und durften eig erst ab dem ändern mit Zeigern speziell arbeiten.

    danke und grüße, Tobias



  • Achja,... was die Sternchen bedeuten, weiß ich leider nicht 😃 Das hatten wir nicht und im Skript stehts auch nicht.
    alsow arum da einmal ** und dann einmal *** ist



  • Ich habe dies auch als Referenz für zukünftige Frager gemacht, ähnliche "Verwaltungsprogramme" stehen hier oft zur Diskussion, ich verweise dann zukünftig einfach auf dieses Beispiel.
    Falls du mal zukünftig auf ähnlichen Quellcode stoßen solltest, weißt du, woher er ursprünglich stammt ;-), da ich mir ziemlich sicher bin, dass in keinerlei Tutorials oder gar Professorengeschreibsel sowas vorkommt.


Log in to reply