struct Verwendung, echt kompliziert jedenfalls für mich
-
Bin Anfänger in C++ und hab nicht so viel Plan. Aber ich brauch eh nur was ganz simples und dazu ein dickes C++ Buch kaufen ist mir irgendwie zu teuer. Deshalb schon mal DANKE für die Hilfe!
Mein Problem beschäftigt sich mit struct. So sieht meins aus:
struct DateiName { char Name[100]; int Laenge; }
So jetzt ist DateiName in einer Datei abgelegt, die ich auslesen möchte und hier beginnt das Problem. Die Datei kann 1 oder mehrere struct DateiName haben (wieviele genau kann ich locker rausfinden bevor DateiName gelesen wird). Und ich möchte gerne jeden DateiName in einen extra struct einlesen, etwa so:
while (i <= StructAnzahl) { fread(.. DateiName..); //Syntax kenn ich, es geht ums Prinzip i++; //nächstes struct }
Das Problem bei diesem Code ist jetzt, dass er es ja immer in den gleichen struct einließt und somit alles überschreibt.
Wie kann ich das jetzt lösen?
Es gilt zu bedenken, dass erst bei run festgestellt werden kann, wieviele struct es gibt und das könnten schon locker mal 10 sein.Also ich bin echt ratlos was das jetzt betrifft und hoffe mal ihr helft mir weiter!
Herzlichen Dank!!
atzplzw
-
Es riecht derbst nach einer verschiebung ins ANSI C Forum
-
Du könntest ein Array auchmachen von Deinen structs.
int anzahl; // wird ausgelesen DateiName * t = new DateiName[anzahl]; for(...) { fread(....DateiName[i]; }
Du musst Dich hierbei jedoch komplett selbst um Deinen Speicher kümmern.
Mit hilfe von std::string std::vector std::fstream und den Operator << und >> könntest Du Dir die Sache aber einfacher gestalten. Du hast zudem keine Probleme das eine Strukt auf jedem Compiler etwas anderst aussehen kann (pading oder irgendwie so O
) und kannst beliebig viele Einträge auslesen.
-
#include <fstream> #include <vector> using namespace std; struct DateiName { char Name[100]; int Laenge; }; ofstream& operator << (ofstream& left, const DateiName& right) { left << right.Name << right.Laenge; return left; } ifstream& operator >> (ifstream& left, DateiName& right) { left >> right.Name >> right.Laenge; return left; } int main() { unsigned int StructsGesamt; ifstream file("Structs.txt"); // getStructsGesamt(); vector<DateiName> Structs(StructsGesamt); for(unsigned int i = 0; i < StructsGesamt; ++ i) file >> Structs[i]; }