wikki Geschrieben 7. Mai 2011 Teilen Geschrieben 7. Mai 2011 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; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mustl Geschrieben 7. Mai 2011 Teilen Geschrieben 7. Mai 2011 (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 7. Mai 2011 von Mustl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 8. Mai 2011 Autor Teilen Geschrieben 8. Mai 2011 (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 8. Mai 2011 von wikki Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mustl Geschrieben 8. Mai 2011 Teilen Geschrieben 8. Mai 2011 (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 8. Mai 2011 von Mustl Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wikki Geschrieben 8. Mai 2011 Autor Teilen Geschrieben 8. Mai 2011 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 Danke nochmals!! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mustl Geschrieben 8. Mai 2011 Teilen Geschrieben 8. Mai 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Mai 2011 Teilen Geschrieben 9. Mai 2011 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Mustl Geschrieben 9. Mai 2011 Teilen Geschrieben 9. Mai 2011 Danke für die Info. Aber wie macht man das dann beim wiederbeschreiben ? Doch ein ios::app ? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Klotzkopp Geschrieben 9. Mai 2011 Teilen Geschrieben 9. Mai 2011 Zum Anhängen mit ios::app öffnen, wie du schon sagtest. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.