Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Quin

Frischling

  • »Quin« ist der Autor dieses Themas

Beiträge: 23

Wohnort: Engelthal

  • Private Nachricht senden

11

12.08.2010, 11:39

Soooo,
nach langen Grübeln :wacko: hab ichs den Fehler doch noch gefunden. Hab erst alle Strings mal auskommentiert wie NachoMan es gesagt hat (schon mal ein grosses Dankeschon an NachoMan 8o ) .
Jetzt mal den Code ohne Fehler

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <string>
#include <fstream>
#include <list>

using namespace std;

class CRaumschiff
{
    public:
        //string Name;
        int Energie;
        int Farbe;
        int Team;
        float Geschwindigkeit;
};

int main()
{
    list<CRaumschiff> lSpieler;
    list<CRaumschiff>::iterator iSpieler;
        
    CRaumschiff Spieler1; // Raumschiff von Spieler 1 
    CRaumschiff Spieler2; // Raumschiff von Spieler 2 

    // Startwerte für Spieler 1 festlegen
    //Spieler1.Name = "Hans";
    Spieler1.Energie = 1000;
    Spieler1.Farbe = 3;
    Spieler1.Team = 1;
    Spieler1.Geschwindigkeit = 250.35f;
    // Daten am Ende der Liste schreiben
    lSpieler.push_back(Spieler1);

    // Startwerte für Spieler 1 festlegen
    //Spieler2.Name = "Peter";
    Spieler2.Energie = 1000;
    Spieler2.Farbe = 2;
    Spieler2.Team = 2;
    Spieler2.Geschwindigkeit = 190.85f;
    // Daten am Ende der Liste schreiben
    lSpieler.push_back(Spieler2);

    // Datei zum Schreiben öffnen
    ofstream Output("Spielstand.sps", ios::binary);

    if(!Output)
    {
        cout << "Datei konnte nicht geoeffnet werden." << endl;
        system("pause");
        return -1;
    }
    

    // Instanz in die Datei schreiben
    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        Output.write((char*) &(*iSpieler), sizeof(*iSpieler));
        
    }

    // Datei schliessen
    Output.close();

    // Dateien der Liste wieder löschen
    
    lSpieler.clear();
        
    // Datei zum Lesen öffnen
    ifstream Input("Spielstand.sps", ios::binary);

    if(!Input)
    {
        cout << "Datei konnte nicht geoeffnet werden." << endl;
        system("pause");
        return -1;
    }
    
    // Instanz aus der Datei lesen
    
    CRaumschiff Temp;
    lSpieler.resize(2,Temp);

    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        Input.read((char*) &(*iSpieler), sizeof(*iSpieler));
    }

    // Werte ausgeben
    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        //cout << "Name            : " << iSpieler->Name << endl
        cout << "Energie         : " << iSpieler->Energie << endl
             << "Farbe           : " << iSpieler->Farbe << endl
             << "Team            : " << iSpieler->Team << endl
             << "Geschwindigkeit : " << iSpieler->Geschwindigkeit << endl << endl;
    }
    
    // Datei schliessen
    Input.close();
    
    system("pause");
    return 0;
}


Ach und noch Danke, für alle eure Antworten. ^^

Quin

Frischling

  • »Quin« ist der Autor dieses Themas

Beiträge: 23

Wohnort: Engelthal

  • Private Nachricht senden

12

12.08.2010, 15:18

Ich hab meinen Code nochmal Überarbeitet, jetzt gibt es in der Klasse Memberfunktionen und die Variablen sind nicht mehr public.
Strings können jetzt auch gespeichert werden und es können auch mehr als 2 Spieler in die Datei gespeichert werden.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include <iostream>
#include <string>
#include <fstream>
#include <list>

using namespace std;

class CRaumschiff
{
    public:
        void SetName(string sName)                     
        {   
            if (strlen(sName.c_str()) < 21)
                strncpy_s(m_cName, sName.c_str(), sizeof(m_cName));
            else
                strncpy_s(m_cName, "?", sizeof(m_cName));
        }

        void SetName(char cName[])                      
        {   
            if (strlen(cName) < 21)
                strncpy_s(m_cName, cName, sizeof(m_cName));
            else
                strncpy_s(m_cName, "?", sizeof(m_cName));
        }
        void SetEnergie(int Energie)                    {m_Energie = Energie;}
        void SetFarbe(int Farbe)                        {m_Farbe = Farbe;}
        void SetTeam(int Team)                          {m_Team = Team;}
        void SetGeschwindigkeit(float fGeschwindigkeit) {m_fGeschwindigkeit = fGeschwindigkeit;}

        char *GetName            () {return m_cName;}
        int   GetEnergie         () {return m_Energie;}
        int   GetFarbe           () {return m_Farbe;}
        int   GetTeam            () {return m_Team;}
        float GetGeschwindigkeit () {return m_fGeschwindigkeit;}

    private:
        char m_cName[21];
        int m_Energie;
        int m_Farbe;
        int m_Team;
        float m_fGeschwindigkeit;
};

int main()
{
    list<CRaumschiff> lSpieler;
    list<CRaumschiff>::iterator iSpieler;

    size_t Groesse = 0;
        
    CRaumschiff Spieler1; // Raumschiff von Spieler 1 
    CRaumschiff Spieler2; // Raumschiff von Spieler 2 
    CRaumschiff Spieler3; // Raumschiff von Spieler 3

    // Startwerte für Spieler 1 festlegen
    Spieler1.SetName("Hans");
    Spieler1.SetEnergie(1000);
    Spieler1.SetFarbe(3);
    Spieler1.SetTeam(1);
    Spieler1.SetGeschwindigkeit(250.35f);
    // Daten am Ende der Liste schreiben
    lSpieler.push_back(Spieler1);

    // Startwerte für Spieler 1 festlegen
    Spieler2.SetName("Peter");
    Spieler2.SetEnergie(1000);
    Spieler2.SetFarbe(2);
    Spieler2.SetTeam(2);
    Spieler2.SetGeschwindigkeit(190.85f);
    // Daten am Ende der Liste schreiben
    lSpieler.push_back(Spieler2);

    // Startwerte für Spieler 1 festlegen
    Spieler3.SetName("Klaus");
    Spieler3.SetEnergie(1800);
    Spieler3.SetFarbe(8);
    Spieler3.SetTeam(1);
    Spieler3.SetGeschwindigkeit(110.66f);
    // Daten am Ende der Liste schreiben
    lSpieler.push_back(Spieler3);

    // Grösse der Liste feststellen
    Groesse = lSpieler.size();

    // Datei zum Schreiben öffnen
    ofstream Output("Spielstand.sps", ios::binary);

    if(!Output.is_open())
    {
        cout << "Datei konnte nicht geoeffnet werden." << endl;
        system("pause");
        return -1;
    }
    // Die Grösse der Liste in die Datei schreiben
    Output.write(reinterpret_cast<char*>(&Groesse), sizeof(Groesse));

    // Instanz in die Datei schreiben
    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        //Output.write((char*) &(*iSpieler), sizeof(*iSpieler));
        Output.write(reinterpret_cast<char*>(&(*iSpieler)), sizeof(*iSpieler));
    }

    // Datei schliessen
    Output.close();

    // Dateien der Liste wieder löschen
    
    lSpieler.clear();
    Groesse = 0;
        
    // Datei zum Lesen öffnen
    ifstream Input("Spielstand.sps", ios::binary);

    if(!Input.is_open())
    {
        cout << "Datei konnte nicht geoeffnet werden." << endl;
        system("pause");
        return -1;
    }
    
    // Grösse der Liste aus der Datei lesen
    Input.read(reinterpret_cast<char*>(&Groesse), sizeof(Groesse));
    
    // Instanz aus der Datei lesen
    CRaumschiff Temp;
    lSpieler.resize(Groesse,Temp);

    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        Input.read(reinterpret_cast<char*>(&(*iSpieler)), sizeof(*iSpieler));
    }

    // Werte ausgeben
    for (iSpieler = lSpieler.begin(); iSpieler != lSpieler.end(); ++iSpieler)
    {
        cout << "Name            : " << iSpieler->GetName() << endl
             << "Energie         : " << iSpieler->GetEnergie() << endl
             << "Farbe           : " << iSpieler->GetFarbe() << endl
             << "Team            : " << iSpieler->GetTeam() << endl
             << "Geschwindigkeit : " << iSpieler->GetGeschwindigkeit() << endl << endl;
    }
    
    // Datei schliessen
    Input.close();
    
    system("pause");
    return 0;
}

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

13

12.08.2010, 15:36

std::string hat ne methode size() ;)
sonst noch viel spass beim üben :D
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

Werbeanzeige