Daten in Binärdatei schreiben...

Ich hab mir deine alte Version mal angeschaut und verbessert.

Man könnte das natürlich noch viel besser machen, aber ich wollte dich nicht noch mehr überfordern. ;)

/edit: Ich hab da ein paar Sachen ändern müssen, damit das bei mir unter Linux kompiliert. Das müßtest du noch zurückändern:

Die Zeile "#define clrscr(...)" entfernen.

Die Zeile "#if 0" entfernen.

Alles zwischen den Zeilen "#else" und "#endif" entfernen.

Den Kommentar vor getch () entfernen.

Die ganzen Präprozessoranweisungen am Anfang (include pragmas uws) wieder reinnehmen.
 

Anhänge

  • kontoprog.zip
    2,9 KB · Aufrufe: 17
Zuletzt bearbeitet:
vielen dank, muss halt noch paar sachen ändern da du alte version genommen hast, und kannste mir vlt noch sagen was ich machen muss um nen neuen kunden anzulegen ?

und beim laden bringt er immer nen fehler
 
Zuletzt bearbeitet:
Also um einen neuen Kunden anzulegen müßtest du zunächst einmal irgendwie eine Verwaltung für alle Kunden erstellen.

Du könntest wie schon gesagt ein Array nehmen. Das Array würde ich dann vor dem Ende des Programms in die Datei speichern und beim Start der Datei laden.
Code:
int main(void) {
  const int max = 10; // maximale Anzahl von Kunden
  standardk konten[max];
  int kunden = 0; // Anzahl der Kunden

  // erstmal sicherstellen, das die Datei existiert.
  if (!ofstream ("test.dat", ios::out | ios::app)) {
    cerr << "Datei konnte nicht erstellt werden.\n";
    return 2;
  }

  fstream test_dat ("test.dat");

  while (kunden < max && konten[kunden].load (test_dat)) {
    ++kunden;
  }

  // Konten benutzen und evtl. verändern ...

  test_dat.seekp (0, ios::beg);

  for (int i = 0; i < kunden; ++i) {
    if (!konten[i].save (test_dat, i+1)) {
      cerr << "Fehler beim Speichern der Datei\n";
      break;
    }
  }
  return 0;
}
Übrigens, die Zeile
Code:
    inhaber=new char[20];
solltest du rausnehmen. Sie ist unnötig und ein Speicherleck.

Dann wegen dem Fehler beim Laden: Füg mal in der Funktion zum Laden folgende Zeile vor die Zeile mit getline(datei, temp.inhaber) ein:
Code:
datei.ignore();
um noch das Zeilenende nach dem Kontostand zu überlesen.
 
Zurück