Zahlen extern speichern und beim neustarten wieder einlesen



  • Hallo 🙂

    Ich habe folgenden Code gegeben, und muss ihn abändern. Nun habe ich doch größere Probleme als zunächst angenommen, aber seht selbst:
    # include <iostream.h>
    # include <conio.h>
    # include <fstream.h>

    int main ( )
    {
    struct memory
    { float value ;
    memory *chain ;
    } ;

    float value ;
    memory *go_on;
    memory *start ;
    go_on = new memory ;
    start = go_on ;

    do
    { cout << "Input : " ; cin >> value ;
    go_on -> value = value ;
    go_on -> chain = new memory ;
    go_on = (go_on -> chain) ;
    }
    while (value > 0 ) ;
    go_on -> chain = NULL ;

    cout << endl << endl << "Output :" << endl << endl ;
    go_on = start ;
    do
    { cout << ( go_on -> value) << endl ;
    go_on = go_on -> chain ;
    }
    while (go_on -> chain != NULL ) ;
    getch ( ) ;
    }

    Hiermit lassen sich beliebig viele Zahlen ein- und anschließend auch wieder ausgeben. Nun soll das Programm unter anderem so erweitert werden, das beim beenden alle Zahlen in einer Zahlen.dat Datei gespeichert werden und beim neustarten wieder eingelesen. Genau hier liegt der Hund begraben für mich. Hab es u.a. mit:
    fstream f("ZAHLEN.DAT", ios::out|ios::binary|ios::in);
    versucht, ohne Erfolg jedoch.

    Hättet ihr vllt ein paar Tipps für mich? Steh gerade direkt vor einer Wand. 😞

    danke,
    metler



  • Das nächste mal mit cpp-Tags bitte.

    Erstmal heisst es <iostream>, <fstream> usw. ohne .h bei den cpp Header

    Schau dir mal das Beispiel hier an:
    http://www.cppreference.com/cppio/constructors.html

    btw:
    Du hast da 2 new's, aber kein einziges delete..



  • Und NULL sollte man in C++ nicht verwenden!



  • D schrieb:

    Und NULL sollte man in C++ nicht verwenden!

    Warum denn nicht? Wenn nullptr bald kommt, kann man sehr leicht suchen und ersetzen. Das geht mit 0 nicht so gut.



  • Ponto schrieb:

    D schrieb:

    Und NULL sollte man in C++ nicht verwenden!

    Warum denn nicht? Wenn nullptr bald kommt, kann man sehr leicht suchen und ersetzen. Das geht mit 0 nicht so gut.

    D mag recht haben wenn es darum geht, das viele übersehen das NULL meist nur ein Makro für 0 ist. Ponto mag recht haben wenn es um den nächsten Standard geht.
    Ich würde die Aussage "NULL sollte man in C++ nicht verwenden" nicht machen, sondern eher: man sollte NULL nur verwenden wenn man weiß was man tut 😉 (Wobei ich auch eher zu der 0 statt NULL-Fraktion angehöre, u.a. weil im beruflichen Umfeld wohl der nächste Standardentwurf für mich zu spät kommt [bis dahin wird es wohl nicht mehr C++, oder wenn doch kein C++0x-Compiler sein])...

    Aber zum OP zurück: Etwas mehr C++ würde dem Programm auch nicht schaden (z.B. einen Konstruktor um den memory-Zeiger mit 0 zu initialisieren...) 😉

    cu André



  • Hallo,

    also ohne den ".h" mag Dev-C++ überhaupt nichts machen. Geht irgendwie nur mit. 🙂

    Okay, ich weiß jetz das die Benutzung von "NULL" äußerst umstritten ist, aber ich versuchs seit Stunden, endlich ne Datei anzulegen, mit den vorhandenen Zahlen zu füllen und nach einem Programmneustart wieder einzulesen... Uff! Habt ihr vllt 1-2 Tipps für mich? 😋

    bye
    metler



  • Metler schrieb:

    also ohne den ".h" mag Dev-C++ überhaupt nichts machen. Geht irgendwie nur mit. 🙂

    unter die includes:

    "using namespace std;"



  • Hallo,

    ofstream File("datei.dat", ios::out);
    if (File.is_open())
    {
       File  << "Rein in die Datei" << endl;
    }
    File.close();
    

    Wo ist das Problem?
    Was für Fehler?

    mfg kaffee



  • Metler schrieb:

    ...also ohne den ".h" mag Dev-C++ überhaupt nichts machen...
    ...Habt ihr vllt 1-2 Tipps für mich?...

    Neben dem bereits gegebenen Tip das der Namensraum std bei C++ Headern seit dem nunmehr 10 Jahre existierenden Standard zu beachten ist? Wie wäre es mit dem Wechsel auf einen aktuellen Compiler (MSVC++ Express 2008, Code::Blocks u.a.)...

    cu André



  • Metler schrieb:

    .. aber ich versuchs seit Stunden, endlich ne Datei anzulegen, mit den vorhandenen Zahlen zu füllen und nach einem Programmneustart wieder einzulesen... Uff! Habt ihr vllt 1-2 Tipps für mich? 😋

    Hallo metler,

    falls Dein Compiler C++ versteht, sollte folgendes funktionieren ...

    // --   Abspeichern
        ofstream datei("datei.txt");  // erfordert #include <iostream> oder <iostream.h>
        for( memory* p = start; p && p->value >= 0; p = p->chain )
            datei << p->value << endl;
    
        // --   und am Ende Speicher freigeben nicht vergessen
        for( memory* p = start; p; )
        {
            memory* tmp = p;
            p = p->chain;
            delete tmp;
        }
    

    Tipp: schau Dir mal std::list an.

    Gruß
    Werner


Log in to reply