Reinspeichern und Rauslesen von Daten eines struct arrays

cecho

Grünschnabel
Hiho ihr Lieben,

hätte da mal nen Code zur Übung gebastelt der nicht so richtig in der Funktion Textauslesen will...

Wichtig ist halt, dass das Array bei Programmneustart wieder eingelesen und indexiert wird - ausgeben kann ich die Datei auch komplett, aber einzelne Filme z.B. noch nicht aufrufen. Compilieren lässt es sich auch nicht...

Bin auf Linux und compiliere mit g++.
C++:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>

 
using namespace std;

struct Bluray //Bluray Struktur
    {
    string name;
    int bewertung;
    string beschreibung;
    };



const int maxfilm=10; //Bluray Array
Bluray film[maxfilm];

void bestaetigung(Bluray film); //Prototypen
void Textschreiben(Bluray film);
void Textauslesen();
int readnumber();

main()

{
int Filmanzahl;

Textauslesen(); //Ausgabe der bisherigen Einträge

cout << "Wie viele Filme möchten Sie der Liste hinzufügen? ";
Filmanzahl = readnumber();

int i=0;
for (i=0; i<Filmanzahl; i++)
    {

        cout << endl << "Name : ";
    
    getline(cin, film[i].name);

    cout << endl << "Bewertung: ";

    film[i].bewertung = readnumber();

    cout << endl << "Beschreibung: ";

    getline(cin, film[i].beschreibung);

    Textschreiben(film[i]);
    bestaetigung(film[i]);
    }
}

void bestaetigung(Bluray film) //Bestätigung & Ende des Programmes
{
cout << "Sie haben " << film.name << " mit der Bewertung " << film.bewertung << " und der Beschreibung: ->" << endl << film.beschreibung << endl << "<-erfolgreich hinzugefügt! " << endl;

}

void Textschreiben(Bluray film[i]) //Reinschreiben in die Datei "summe.txt"
{
fstream e;
e.open("summe.txt", ios::out|ios::app);
e << endl << "Name: " << film.name << " Bewertung: " << film.bewertung << " Beschreibung: " << film.beschreibung << "\n";
e.close();
}

void Textauslesen() //komplettes Auslesen und Ausgeben des bisher geschriebenen Textes
{
/*
cout << endl << "Bisherige Einträge: " << endl;
ifstream in("summe.txt");
copy(istreambuf_iterator<char>(in),istreambuf_iterator<char>(),ostreambuf_iterator<char>(cout));
cout << endl;*/

int i=0;
char test[256];

ifstream e;  // Datei-Handle
e.open("summe.txt", ios::in); // Öffne Datei aus Parameter
i=0;
while (e.getline(test, 256, '\n'))
    {          // Solange noch Daten vorliegen
         getline(e, film[i]);
         ++i;
        }
                    e.close();

/*cout << endl << "Found movie at position " << i << endl;

for(i=0; i<maxfilm; i++)
    {
        cout << "Film " << i+1 << " heisst " << film[i] << "\n";
        }
*/
}

int readnumber() //Funktion zum Einlesen und anschließendem Umwandeln einer Zahl

{
string in;
getline(cin, in);
int ergebnis=-1;
ergebnis=atoi(in.c_str());
return ergebnis;
}

Danke für jede Hilfe und Verbesserung :)
 
Zuletzt bearbeitet von einem Moderator:
Hallo,
bevor ich das lese würde ich mir wünschen, dass du das ordentlich formatierst, denn das ist eine Qual :D
Außerdem wäre gut zu wissen warum es nicht kompiliert => Compiler Fehler und Zeile schreiben.

Grüße Jennesta
 
Wir haben es so gelernt... Alles was auf einer Ebene ist, wird nicht eingerückt. Oder was genau meinst du?
 
Moin,

Wir haben es so gelernt... Alles was auf einer Ebene ist, wird nicht eingerückt.
Oder was genau meinst du?
So gelernt? hmm ....

So vielleicht:
C++:
#include <cstdlib>
#include <iostream>
#include <string>
#include <fstream>
 
 
using namespace std;
 
struct Bluray  //Bluray Struktur
{
    string name;
    int bewertung;
    string beschreibung;
};
 
 
const int maxfilm=10; //Bluray Array
Bluray film[maxfilm];
 
void bestaetigung(Bluray film); //Prototypen
void Textschreiben(Bluray film);
void Textauslesen();
int readnumber();
 
main()
{
    int Filmanzahl;
 
    Textauslesen(); //Ausgabe der bisherigen Einträge
 
    cout << "Wie viele Filme möchten Sie der Liste hinzufügen? ";
    Filmanzahl = readnumber();
 
    int i=0;
    for (i=0; i<Filmanzahl; i++)
    {
        cout << endl << "Name : ";
        getline(cin, film[i].name);
        cout << endl << "Bewertung: ";
        film[i].bewertung = readnumber();
        cout << endl << "Beschreibung: ";
        getline(cin, film[i].beschreibung);
        Textschreiben(film[i]);
        bestaetigung(film[i]);
    }
}
 
void bestaetigung(Bluray film) //Bestätigung & Ende des Programmes
{
    cout << "Sie haben " << film.name << " mit der Bewertung " << film.bewertung << " und der Beschreibung: ->" << endl << film.beschreibung << endl << "<-erfolgreich hinzugefügt! " << endl;
}
 
void Textschreiben(Bluray film[i]) //Reinschreiben in die Datei "summe.txt"
{
    fstream e;
    e.open("summe.txt", ios::out|ios::app);
    e << endl << "Name: " << film.name << " Bewertung: " << film.bewertung << " Beschreibung: " << film.beschreibung << "\n";
    e.close();
}
 
void Textauslesen() //komplettes Auslesen und Ausgeben des bisher geschriebenen Textes
{
    /*
    cout << endl << "Bisherige Einträge: " << endl;
    ifstream in("summe.txt");
    copy(istreambuf_iterator<char>(in),istreambuf_iterator<char>(),ostreambuf_iterator<char>(cout));
    cout << endl;
    */
 
    int i=0;
    char test[256];
 
    ifstream e;  // Datei-Handle
    e.open("summe.txt", ios::in); // Öffne Datei aus Parameter
    i=0;
    while (e.getline(test, 256, '\n'))
    {
        // Solange noch Daten vorliegen
        getline(e, film[i]);
        ++i;
    }
    e.close();
 
    /*
    cout << endl << "Found movie at position " << i << endl;
    for(i=0; i<maxfilm; i++)
    {
        cout << "Film " << i+1 << " heisst " << film[i] << "\n";
    }
    */
}
 
int readnumber() //Funktion zum Einlesen und anschließendem Umwandeln einer Zahl
{
    string in;
    getline(cin, in);
    int ergebnis=-1;
    ergebnis=atoi(in.c_str());
    return ergebnis;
}

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Die Übergabe des Parameters in Zeile 53 ist falsch. Wenn du nur ein Bluray-Objekt übergeben willst, übergib einfach so:

C++:
void Textschreiben (Bluray b)

In Zeile 79 übergibst du getline() als 2.Parameter film[i], das ist ein Bluray-Objekt. getline() kann mit diesem nichts anfangen, ich vermute einmal du willst den string des Bluray-Objekts übergeben ->
C++:
getline (e, film[i].name

Lg
 
Zuletzt bearbeitet:
Zurück