Double-Werte in Datei auslesen [beantwortet]



  • Hallo! 🙂

    Vielleicht kann mir jemand helfen?

    Ich habe einen Kd-Baum geschrieben, dessen Blätter ich jetzt in eine txt-file auslesen möchte. Dazu muss ich meine auslese-funktion rekursiv aufrufen.
    Ich kenne mich leider mit dateioperationen noch garnicht aus.
    Bei mir wird offenbar bei jedem Aufruf an den Anfang der Datei gesprungen und ich weiß nicht, wie das wegbekomme. Momentan wird nur das letzte Blatt geschrieben.
    (bzw. vlt alle anderen überschrieben)

    Ein Stück meines Quellcodes:

    ...

    void baum_auslesen_datei(knoten * wurzel, int dimension, int anzahl)
    {
        if(wurzel != NULL)
        {
    
        int i, j;
    
        fstream f;
        f.open("Sicherung", ios::out);
    
        f << dimension << "\t" << anzahl << endl;
    
        for(j = 0; j < dimension; j++)
            f << wurzel->wert[j] << "\t";
    
        f << endl;
    
        f.close();
    
        baum_auslesen_datei(wurzel->links, dimension, anzahl);
        baum_auslesen_datei(wurzel->rechts, dimension, anzahl);
    
        // cout << "Baum in \"Sicherung.dat\" ausgelesen.";
    
        }
    }
    

    Vielen Dank für eure Hilfe. 🙂


  • Mod

    Das liegt daran, dass du nach jeder Dateioperation die Datei schließt. Wenn du sie vor der nächsten Aktion wieder öffnest, wird logischerweise wieder an den Anfang gesprungen.



  • Danke für deine schnelle Antwort!
    Weißt du, wie ich ans Ende der Datei springen kann?


  • Mod

    Tonikum schrieb:

    Danke für deine schnelle Antwort!
    Weißt du, wie ich ans Ende der Datei springen kann?

    Mit tellg() kannst du zu beliebigen Positionen springen, auch ans Ende.

    Ich dachte aber eher, dass du das Öffnen und Schließen rausnehmen solltest.


  • Administrator

    SeppJ schrieb:

    Tonikum schrieb:

    Danke für deine schnelle Antwort!
    Weißt du, wie ich ans Ende der Datei springen kann?

    Mit tellg() kannst du zu beliebigen Positionen springen, auch ans Ende.

    *hüstel* Ich glaube du meinst seekg . 😃

    Grüssli



  • Vielen lieben Dank, hat sich alles geklärt! 🤡


Anmelden zum Antworten