HILFE stecke fest
-
Hallo zusammen
Der Code kann ich kompilieren und das Programm läuft. Mein Problem ist, dass beim lesen der Datei, die Schlaufe den letzten durchgang zweimal macht, also beim letzten durchgang die Daten doppelt ausgibt. Ich hab lange versucht aber nichts hat geholfen. Kann mir jemand weiterhelfen? Herzlichen Dank schonmal
include "stdafx.h" #include <fstream> #include <iostream> using namespace std; class c_umsatz{ private: short m_kundennummer; short m_umsatz; char m_name[80]; char fileName[80]; fstream outFile; void open(); public: c_umsatz(); c_umsatz(short kundenummer,short umsatz,char *name); ~c_umsatz(); void save(); void getall(); void add(short kundenummer,short umsatz,char *name); };//Ende Interface c_umsatz::~c_umsatz(){ //Falls die Datei noch geöffnet ist, dann hier schliessen if(!outFile){ outFile.close(); } }//Ende Destruktor c_umsatz::c_umsatz(){ strcpy(fileName,"kunden.bin"); this->open(); m_kundennummer = 0; m_umsatz = 0; }//Ende Standardkonstruktor c_umsatz::c_umsatz(short kundenummer,short umsatz,char *name){ strcpy(fileName,"kunden.bin"); this->open(); m_kundennummer = kundenummer; m_umsatz = umsatz; strcpy(m_name,name); }//Ende Konstruktor mit Uebergabewerten void c_umsatz::open(){ outFile.open(fileName,ios::in|ios::out|ios::binary|ios::app); if(!outFile){ cout<<"File existiert nicht!"<<endl; }//Ende if }//Ende open() void c_umsatz::save(){ outFile.write(reinterpret_cast<char*>(&m_kundennummer),sizeof(m_kundennummer)); outFile.write(reinterpret_cast<char*>(&m_umsatz),sizeof(m_umsatz)); outFile.write(reinterpret_cast<char*>(&m_name),sizeof(m_name)); }//Ende save() void c_umsatz::getall(){ outFile.seekg(static_cast<streamoff>(0),ios::beg); while (!outFile.eof()){ outFile.read(reinterpret_cast<char*>(&m_kundennummer),sizeof(m_kundennummer)); outFile.read(reinterpret_cast<char*>(&m_umsatz),sizeof(m_umsatz)); outFile.read(reinterpret_cast<char*>(&m_name),sizeof(m_name)); cout << "Kundenummer: " << m_kundennummer << endl; cout << "Umsatz : " << m_umsatz << endl; cout << "Name : " << m_name << endl; cout << "------------------------------------" <<endl; }//Ende while }//Ende getall() void c_umsatz::add(short kundennummer,short umsatz,char *name){ strcpy(m_name,name); outFile.write(reinterpret_cast<char*>(&kundennummer),sizeof(kundennummer)); outFile.write(reinterpret_cast<char*>(&umsatz),sizeof(umsatz)); outFile.write(reinterpret_cast<char*>(&m_name),sizeof(m_name)); }//Ende add() int main(){ c_umsatz lohn(10,11,"Adrian Schaub"); lohn.save(); lohn.add(20,30,"Vivien Schaub"); lohn.add(40,50,"Jo"); lohn.getall(); return 0; }
-
Crossposting: http://c-plusplus.net/forum/viewtopic.php?t=74273&sid=39f0600077d67219017f8ee5a288d2b2
-
Offenbar hab ich was falsch gemacht, sorry wegen dem crossposting oder wie das heisst, bin halt neu hier und noch nicht mal Mitglied, hoffe aber dies ist nicht der Grund, warum mir hier niemand antwortet (noch voller Hoffnung)
.
Gruss
Boarderadi
-
also in meinen augen sieht das richtig aus