Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Eingabe als text Datei speichern

Empfohlene Antworten

Veröffentlicht

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;

}



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



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

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

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!!

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.


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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.