mehrdimensionales Array speichern und laden
-
Hi mein Programm funktionier, bis auf das Speichern, bzw. das Laden des mehrdimensionales Array.
Ich find den Fehler nicht und hoff ihr könnt mir helfen
zur Info: Das Array heißt Feld[7][7][11].#include <cstdlib> #include <iostream> #include <conio.h> #include <stdio.h> #include <windows.h> #include "spiel.hpp" #include "menu.hpp" #ifndef SPEICHERN_LADEN_HPP #define SPEICHERN_LADEN_HPP //****************************************************************************** // SpielSpeichern //****************************************************************************** void SpielSpeichern() { FILE* DateiZeiger; // Datei öffnen Modus: Binär und Schreiben, Datei wird immer neu erzeugt und ersetzt alte Datei DateiZeiger = fopen( "Spielstand.dat", "w, b" ); //w=write | b=binäääär // Ist das Öffnen der datei erfolgreich gewesen? if (DateiZeiger == NULL) { // Fehler anzeigen: Spielstanddatei konnte nicht geöffnet werden } else { // Alles OK also Spielstand speichern // Spielsteine speichern fwrite (&Feld[0][0][0], sizeof(Feld), 7 * 7 * 11, DateiZeiger); // Datei schliessen if( DateiZeiger != NULL) { if ( fclose( DateiZeiger ) == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geschlossen werden }// ENDE if Datei schließen OK }// Datei zeiger OK } // ENDE if else datei öffnen OK printf("fertisch"); Sleep(100); } // SpielSpeichern() //****************************************************************************** // SpielLaden //****************************************************************************** void SpielLaden() { FILE* DateiZeiger; // Datei öffnen Modus: Binär Lesen DateiZeiger = fopen( "Spielstand.dat", "r, b" ); // Ist das Öffnen der datei erfolgreich gewesen? if (DateiZeiger == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geöffnet werden } else { // Alles OK also Spielstand lesen // Spielsteine lesen fread (&Feld[0][0][0], sizeof(Feld), 7 * 7 * 11 , DateiZeiger); // Datei schliessen if( DateiZeiger != NULL) { if ( fclose( DateiZeiger ) == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geschlossen werden }// ENDE if Datei schließen OK }// Datei zeiger OK } // ENDE if else datei öffnen OK printf("fertisch"); Sleep(100); } // ENDE SpielLaden() #endif
-
Was funktioniert den da den nicht bitteschön?
btw:
Benutz C/C++ Code Tags und ich denke du wolltest sowieso ins C Forum.
-
drakon schrieb:
Was funktioniert den da den nicht bitteschön?
btw:
Benutz C/C++ Code Tags und ich denke du wolltest sowieso ins C Forum.also es speichert oder lädt, es wird mir zwar angezeigt, dass es speichert bzw. ladet (durch den printf-Befehl)...ich kann dann zwar weiterspielen, ABER es tut sich nix im Bereich Speichern-Laden.
und zu deinem btw:
hab jetz nur in dieser .hpp die hauptsächlich c-tags drin...frag aber net warum^^
-
slevin schrieb:
und zu deinem btw:
hab jetz nur in dieser .hpp die hauptsächlich c-tags drin...frag aber net warum^^Nein, du hast keine Tags drin... Ein Tag dient zum Formatieren der Ausgabe, und ist Befehl in dem sinne. Und von "hauptsächlich" kann auch nicht die Rede sein. Ich sehe keine einzige sache die auf C++ hindeutet.
Unterhalb des Fensters zum eingeben von einer neuen Nachricht siehst du viele Buttons (Mit Icons und Texten), dort gibt es ein "C/C++"-Button der die geforderten C++ Tags setzt. Wenn du nun zweimal darauf klickst und zwischen diese beiden Tags deinen Code setzt, ist er schon deutlich lesbarer.
cu André
P.S: Doch, 2 Elemente die auf C++ deuten sehe ich jetzt doch:#include <cstdlib> // Auch wenn eine C-Bibliothek, die C++ Schreibweise #include <iostream> // Auch wenn nicht verwendet, eine C++ Bibliothek
-
#include <cstdlib> #include <iostream> #include <conio.h> #include <stdio.h> #include <windows.h> #include "spiel.hpp" #include "menu.hpp" #ifndef SPEICHERN_LADEN_HPP #define SPEICHERN_LADEN_HPP //****************************************************************************** // SpielSpeichern //****************************************************************************** void SpielSpeichern() { FILE* DateiZeiger; // Datei öffnen Modus: Binär und Schreiben, Datei wird immer neu erzeugt und ersetzt alte Datei DateiZeiger = fopen( "Spielstand.dat", "w, b" ); //w=write | b=binäääär // Ist das Öffnen der datei erfolgreich gewesen? if (DateiZeiger == NULL) { // Fehler anzeigen: Spielstanddatei konnte nicht geöffnet werden } else { // Alles OK also Spielstand speichern // Spielsteine speichern fwrite (&Feld[0][0][0], sizeof(Feld), 7 * 7 * 11, DateiZeiger); // Datei schliessen if( DateiZeiger != NULL) { if ( fclose( DateiZeiger ) == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geschlossen werden }// ENDE if Datei schließen OK }// Datei zeiger OK } // ENDE if else datei öffnen OK printf("fertisch"); Sleep(100); } // SpielSpeichern() //****************************************************************************** // SpielLaden //****************************************************************************** void SpielLaden() { FILE* DateiZeiger; // Datei öffnen Modus: Binär Lesen DateiZeiger = fopen( "Spielstand.dat", "r, b" ); // Ist das Öffnen der datei erfolgreich gewesen? if (DateiZeiger == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geöffnet werden } else { // Alles OK also Spielstand lesen // Spielsteine lesen fread (&Feld[0][0][0], sizeof(Feld), 7 * 7 * 11 , DateiZeiger); // Datei schliessen if( DateiZeiger != NULL) { if ( fclose( DateiZeiger ) == NULL ) { // Fehler anzeigen: Spielstanddatei konnte nicht geschlossen werden }// ENDE if Datei schließen OK }// Datei zeiger OK } // ENDE if else datei öffnen OK printf("fertisch"); Sleep(100); } // ENDE SpielLaden() #endif
soderle
-
Steht den in deinem File überhaupt etwas drin?
-
hmm...ka...en Kumpel hat mir den Quelltext gegeben (bei ihm läufts mit nem 2D-Array perfekt) und ich hab ihn dann entsprechend geändert
-
slevin schrieb:
hmm...ka...en Kumpel hat mir den Quelltext gegeben (bei ihm läufts mit nem 2D-Array perfekt) und ich hab ihn dann entsprechend geändert
Na. Danns solltest du dich ein wenig mehr damit beschäftigen. Und so oder so C++ Mittel nutzen.
int a[2][2][2]; //Schreiben std::ofstream out("out.b"); for(int x = 0; x < 2;++x) for (int y = 0;y < 2 ; ++y) for (int z = 0;z < 2 ; ++z) a[x][y][z] = 2; out.write ((char*)a,2*2*2*sizeof(int)); out.close (); //Und lesen std::ifstream in ("out.b"); in.read ((char*)a,2*2*2*sizeof(int)); for(int x = 0; x < 2;++x) for (int y = 0;y < 2 ; ++y) for (int z = 0;z < 2 ; ++z) std::cout << a[x][y][z] << std::endl; in.close ();
Wobei du dir den Einsatz von einem solchen Array nochmal überdenken solltest.