Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo liebe Fachkundige ;D

Am ende ist das beschriebene Programm, nun erstmal zu meinem Problem!

Also ich habe unten stehendes Programm zum Üben von Methoden geschrieben.

Nun dacht ich mir das es ganz cool wäre wenn man die Eingaben von der Methode "eingeben()" in eine Text-Datei speichern könnte?!

Hab nun durch Google die lib <fstream> gefunden, mit er es wohl möglich ist. Jedoch vestehe ich da nichts?

Wie kann man das realisieren? Ich hoffe das ihr mir helfen könnt :)

Danke im Vorraus,

Alex

ps: ja ich weiß das die sleep Anweisungen unnötig sind, aber ich fands halt hübsch^^...

#include <iostream>

#include <string>

#include <conio.h>

#include <cstdlib>

#include <windows.h>

#include <fstream>

using namespace std;



class CBuch

{

  private:

  string verfasser;

  string titel;

  int eJahr, invNr;

  public:

  void ausgeben ()

  {

      cout << "Verfasser: " << verfasser << endl;

      cout << "Titel: " << titel << endl;

      cout << "Erscheinungs Jahr: " << eJahr << endl;

      cout << "Inventarnummer: " << invNr << endl;

  }

  void eingeben ();


};



int main ()

{

    CBuch b1, b2;




    cout << "Die Eingabe fuer Buch 1 wird gestartet ." << endl;

    Sleep(600);

    system("cls");

    cout << "Die Eingabe fuer Buch 1 wird gestartet . ." << endl;

    Sleep(600);

    system("cls");

    cout << "Die Eingabe fuer Buch 1 wird gestartet . . ." << endl;

    Sleep(600);

    system("cls");

    b1.eingeben();

    system("cls");

    cout << "Die Eingabe fuer Buch 2 wird gestartet ." << endl;

    Sleep(600);

    system("cls");

    cout << "Die Eingabe fuer Buch 2 wird gestartet . ." << endl;

    Sleep(600);

    system("cls");

    cout << "Die Eingabe fuer Buch 2 wird gestartet . . ." << endl;

    Sleep(600);

    system("cls");

    b2.eingeben();

    system("cls");


    cout << "Beide Bücher wurden erfolgreich abgespeichert.";

    cout << endl << "Buch 1 hat folgenden Inhalt: " << endl;

    b1.ausgeben();

    cout << endl << "Buch 2 hat folgenden Inhalt: " << endl;

    b2.ausgeben();



    return 0;

}


void CBuch::eingeben ()

{


    cout << "Bitte geben Sie den Verfasser ein: "; getline (cin, verfasser);

    cout << "Nun bitte den Titel: "; getline (cin, titel);

    cout << "Geben Sie nun bitte das Erscheinungs Jahr ein: "; cin >> eJahr;

    cout << "Zuletzt noch bitte die Inventarnummer: "; cin >>invNr;

}

Geschrieben (bearbeitet)



void CBuch::eingeben ()

{

    ofstream Schreiben;

    Schreiben.open("datei.dat",ios::out);    


    cout << "Bitte geben Sie den Verfasser ein: "; getline (cin, verfasser);

    cout << "Nun bitte den Titel: "; getline (cin, titel);

    cout << "Geben Sie nun bitte das Erscheinungs Jahr ein: "; cin >> eJahr;

    cout << "Zuletzt noch bitte die Inventarnummer: "; cin >>invNr;


     Schreiben<<verfasser<<titel<<eJahr<<invNr;


     Schreiben.close();

}

Die Datei befindet sich dann im entsprechenden Projektordner.

Bearbeitet von Mustl
Geschrieben (bearbeitet)


void CBuch::eingeben ()

{

    ofstream Schreiben;

    Schreiben.open("datei.dat",ios::out);    


    cout << "Bitte geben Sie den Verfasser ein: "; getline (cin, verfasser);

    cout << "Nun bitte den Titel: "; getline (cin, titel);

    cout << "Geben Sie nun bitte das Erscheinungs Jahr ein: "; cin >> eJahr;

    cout << "Zuletzt noch bitte die Inventarnummer: "; cin >>invNr;


     Schreiben<<verfasser<<titel<<eJahr<<invNr;


     Schreiben.close();

}

Die Datei befindet sich dann im entsprechenden Projektordner.

Vielen Dank!

Kann mir nun noch jemand erklären wofür die Sachen stehen? Also was sie bewirken? Dann wäre ich rundum zufrieden =) Danke nochmal!

Ach, habe es gerade mal ausprobiert. Der speichert nicht alles, und wenn dan ohnehin nur vom Buch 2 die Eingaben, kann man das noch verfeinern?

Bearbeitet von wikki
Geschrieben (bearbeitet)

Mit ofstream Schreiben; deklariert man eine Variable vom Typ "ofstream".

Mit Schreiben.open("Datei",ios::out); öffnet/erstellt man eine Datei, in die hineingeschrieben wird.

Wenn man in diese Datei dann nochmal reinschreiben will (ohne vorherigen Inhalt zu löschen) nimmt man ios::app

Mit Schreiben<<Inhalt;

schreibt man dann in die Datei hinein, was man will, und mit Schreiben.close() schließt man sie.

Zum herauslesen aus Dateien, nimmt man eine ifstream-Variable und ios::in ,also z.B.

ifstream Lesen("Datei",ios::in);

Damit kann man die Datei auslesen und in eine Variable (z.B. string Zeile; ) speichern, z.B. zeilenweise getline(Lesen,Zeile);

Wenn man die ganze Datei auslesen und auf dem Bildschirm ausgeben will, sieht das etwa so aus :

getline(Lesen,Zeile);

while (!Lesen.eof())

{

cout<<Zeile<<endl;

getline(Lesen,Zeile);

}

Bearbeitet von Mustl
Geschrieben

Nochmals vielen Dank!

Ein Fehler ist noch im Code: Wenn ich im 2. Durchlauf, also bei b2, den Verfasser eingeben will, überspringt es diesen einfach, es erfolgt also sofort nach dem "laden" die abfrage nach dem Titel? Woran kann das liegen :o

Danke nochmals!!

Geschrieben

Hm, sowas liegt meist am Puffer, der hat noch einen Zeilenumbruch drinliegen.

Mal mit cin.sync(); und cin.clear(); (vor dem erneuten Durchlauf) probieren .

Oder auch die anderen Sachen mit getline(cin,...); eingeben lassen.

Geschrieben

void CBuch::eingeben ()
{
ofstream Schreiben("datei.dat");

cout << "Bitte geben Sie den Verfasser ein: "; getline (cin, verfasser);
cout << "Nun bitte den Titel: "; getline (cin, titel);
cout << "Geben Sie nun bitte das Erscheinungs Jahr ein: "; cin >> eJahr;
cout << "Zuletzt noch bitte die Inventarnummer: "; cin >>invNr;

Schreiben<<verfasser<<titel<<eJahr<<invNr;
}
[/CODE]

Auf open() und close() kann und sollte man verzichten. Der Stream-Konstruktor übernimmt das Öffnen gleich mit, und der Destruktor übernimmt das Schließen. Je früher man sich RAII angewöhnt, desto besser. Die Angabe von ios::out bei ofstream (sowie ios::in bei ifstream) ist auch überflüssig.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...