ofstream und neue einträge



  • hi,
    ich habe eine programm geschrieben, mit dem man adressen speichern kann. hier der ausschnitt wo es zwickt

    void neu ()
    {   
         ofstream verwaltung ("adressen.pim");
    
         if (verwaltung.is_open())
         {
               cout << "\n\n"; 
               cout << "Bitte den Vornamen eingeben: ";
               cin >> vorname;
               cout << "\nBitte den Nachnamen eingeben: ";
               cin >> nachname;
               cout << "\nBitte die Strasse eingeben: ";
               cin >> strasse;
               cout << "\nBitte die Hausnummer eingeben: ";
               cin >> nummer;
               cout << "\nBitte die Postleitzahl eingeben: ";
               cin >> postleitzahl;
               cout << "\nBitte den Wohnort eingeben: ";
               cin >> ort;
               cout << "\n\n";
               verwaltung << vorname << " ";
               verwaltung << nachname << "\n";
               verwaltung << strasse << " ";
               verwaltung << nummer << "\n";
               verwaltung << postleitzahl << " ";
               verwaltung << ort << "\n";
               verwaltung << "-----------\n";
    
               verwaltung.close();
         }          
    }
    

    wenn man jetzt einen 2ten eintrag starten möchte, wird der erste einfach überschrieben. es muss irgendwas mit ios::end oder so sein...aber ich verstehe es einfach nicht. habe in meinem buch nachgelesen und tuts aus dem internet genutzt, aber leider bekomme ich es einfach nicht hin. könnt ihr mir helfen?



  • ofstream verwaltung ("adressen.pim",ios::app); // append = anfügen
    

    MfG SideWinder



  • oki besten dank. das funktioniert schon mal :).
    nun merke ich, dass die ausgabe es nicht nach meiner vorstellung ausgibt...

    void aufrufen ()
    {
         ifstream verwaltung("adressen.pim", ios::in);
         cout << "\n\n";
         verwaltung.getline (buffer, 100);
         cout << "\t\t" << buffer;
         cout << "\n";
         verwaltung.getline (buffer, 100);
         cout << "\t\t" << buffer;
         cout << "\n";
         verwaltung.getline (buffer, 100);
         cout << "\t\t" << buffer;
         cout << "\n";
         verwaltung.getline (buffer, 100);
         cout << "\t\t" << buffer;
         cout << "\n\n\n";
    }
    

    dachte eigentlich das es reicht, da man ja immer nur einen eintrag ausgibt und dann einen neuen usw..evtl. habe ich das auch falsch verstanden. der fehler sieht wie folgt aus: die ausgabe ist abgehackt und fehlt teilweise. habe auch schon ios::in eingebaut da ich ja jetzt weiß wo es hin muss.



  • Hehe, aber das ios::in kannst du dir sparen, es wird bei ifstream standardmäßig benützt 😉

    Zum "Abhacken" der Ausgabe: Zeig doch bitte mal den Inhalt einer Beispiel-Datei und dessen Ausgabe. Ich rieche schon förmlich, dass Whitespace das Problem ist *g*

    Weils mir grad kommt: Zeig auch noch deine Definition von buffer 🙂

    MfG SideWinder



  • beispiel datei? meinst du die externe datei?

    Max Mustermann
    Musterstrasse 12
    1234 Musterhausen
    -----------
    Melanie Mustermann
    Musterstrasse 11
    1234 Musterhausen
    -----------

    also so schaut der inhalt der adressen.pim aus. hoffe du hast das gemeint...

    nun noch der buffer(ich geb es zu...so ganz versteh ich das mitn buffern nicht :-/):

    char buffer[256];
    

    ist das nicht die maximale länge der zeichen die ausgegeben werden können?



  • Jo genau, diesen Inhalt - allerdings hätte ich gerne die von dir erwähnte zerfetzte Ausgabe dieses Inhalts am Bildschirm auch noch gerne gesehen 😉

    Ein Buffer ist ein Array von Zeichen, du legst also nicht bloß eine char-Variable an sondern in deinem Fall 256. Jetzt kannst du 256 Zeichen in buffer abspeichern. Eine Zeile kann also in deiner Text-Datei bis zu 256 Zeichen haben.

    BTW: Das letzte "\n" eines cout-Blockes ersetzt man mit "endl" damit der Buffer (Nicht deiner, aber cout verwendet intern auch einen) auch sicher am Bildschirm angezeigt wird:

    cout << "Hier ganz normal \n";
    cout << "Letzte cout-Anweisung hier" << endl; // endl statt \n
    

    MfG SideWinder



  • http://mitglied.lycos.de/unserserver/Bilder/console.JPG

    die buffer sind so angelegt, dass sie genau die ausgabe eines datensatzes leisten. sprich eine eingabe mit name und adresse. aber dann ist schluss und der rest wird nicht angezeigt.

    kann mir einer helfen?


Anmelden zum Antworten