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
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 |
#include <iostream> using namespace std; #include <fstream> #include <cstring> #include <iomanip> #include <direct.h> #include "fs_class.h" #define Pfad "C:\\cpp\\fs_write_read_binary.txt" typedef gamer rofl; int main(){ rofl Platzhalter; //Platzhalter.set(1, 20, 30, "roflGUY"); rofl temp; //ofstream HausEine; //HausEine.open(Pfad, ios::out | ios::binary | ios_base::trunc ); //if(!HausEine){ // cerr << "Error opening file::line: " << __LINE__ << endl; //} //HausEine.write((const char*)&Platzhalter, sizeof(rofl)); //HausEine.close(); fstream AussaDamit; AussaDamit.open(Pfad, ios::in | ios::out | ios::binary); AussaDamit.read((char*)&tempGamer, sizeof(rofl)); int input; do{ tempGamer.get(); cout << "set a new level: "; cin >> input; if((input >0) && (input <=170)){ AussaDamit.read((char*)&tempGamer, sizeof(rofl)); temp.level = input; AussaDamit.write((const char*)&tempGamer, sizeof(rofl)); cout << "manipulating level succeeded!" << endl; } else { cout << "manipulating level failed! Input is not conform." << endl; } } while( input != 0); AussaDamit.close(); return(0); } |
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 |
#define MAXNAMELENGTH 100 class gamer{ public: int id; int level; short percent_by_level; char name[MAXNAMELENGTH]; public: void set(int id, int level, short percent_by_level, char *name); void get(); void setLevel(int lvl); }tempGamer; ////////////////////////////////////////////////////////////////////////// //Setzen der Attribute für gamer-class void gamer::set(int id, int level, short percent_by_level, char *name){ this->id = id; this->level = level; this->percent_by_level = percent_by_level; strcpy_s(this->name, sizeof(this->name), name); } //Attribute über 'cout' auf Konsole ausgeben void gamer::get(){ cout << "id: " << id << " " << "lvl: " << level << " " << "percent: " << percent_by_level << " " << "name: " << name << endl; } //Neues Level Setzen void gamer::setLevel(int lvl){ this->level = lvl; } |
Zitat von »"Databyte"«
Wie oft hast du die Klasse denn in die Datei geschriben ?
Wenn du nämlich was aus einem Stream (in diesem Fall fstream) rausliest, wird der weitergesetzt. Das bedeutet, dass du ihn zuerst wieder an den Anfang setzten musst, was mit "AussaDamit.seekg (0, ios::beg)" geht.
Das wäre aber ein bisl sinnlos, da du ja den Gamer bereits geladen hast.
Zitat von »"Alyx"«
Waaaaah, du kannst doch nicht direkt via Pointer eine Klasse in die Datei schreiben.... alter Schwede ....
Nein, das geht nur bei POD-Typen und ist sehr unflexibel. Sobald man einen Member hinzufügt, kann man alle Dateien wegwerfen. Und Portabilität kann man gleich komplett vergessen.Zitat von »"Sylence"«
Natürlich geht das.
Okay.Zitat von »"Alyx"«
Sorry, aber das hat mit bequem nichts zu tun, das ist einfach extremst unsauber und würde dir bei so ziemlich jedem halbwegst vernünftigem Vorgesetzen ein sofortiges Unter-4-Augen-Gespräch garantieren.
Äh, wie war das mit dem vorherigen Satz? Was ist denn jetzt genau sauberer daran, eine Referenz auf die erste Variable statt eines Zeigers auf das Objekt zu haben? Die Referenz ist ja noch viel schlimmer, da man sich auf interne Datenrepräsentierungen verlässt. Man muss die Variablen offenlegen, nur schon eine Umordnung der Membervariablen macht den gesamten Anwendercode unbrauchbar. Sowas macht man sicher nicht.Zitat von »"Alyx"«
Für soetwas gibt es entweder structs und unions oder bei übersichtlichen Klassen die Referenz auf die erste Variable, aber ganz bestimmt nicht auf das Objekt.
Werbeanzeige