2017-11-02 1 views
0

nicht aktualisieren Ich möchte Betrag in Konto xyz abheben, aber wenn ich Betrag abziehe, kann ich neuen Betrag in Datei in bestimmter Position nicht aktualisieren (wo 1200 ist geschrieben) was kann ich tun?ich habe Projekt auf dem Banksystem in C++. Ich möchte Betrag abheben, aber wenn ich Betrag abziehe, kann ich neuen Betrag in Datei insbesondere Position

Dies ist meine Rückzugfunktion.

void withdraw() 
{ 
    ofstream f2("bank",ios::out | ios :: app); 
    ifstream f1("bank",ios::in | ios :: app); 

    f1.seekg(0); 
    long long a_num; 
    long double w_amount; 

    cout << "Enter Account Number :" << endl; 
    cin >> a_num; 
    Bank ac; 

    while (f1 >> acc_num >> name >> acc_type >> amount){ 

     if(acc_num == a_num){ 

      int g = f1.tellg(); 
      cout << "Get" << g << endl; 
      int p=g; 
      acc_num=0; 
      f2.seekp(p,ios::beg); 
      cout << "Name   :" << name << endl; 
      cout << "Account type :" << acc_type << endl; 
      cout << "balance  :" << amount << endl; 

      cout << "Enter withdraw amount : " << endl; 
      cin >> w_amount; 
      amount = amount - w_amount; 
      cout << "Balance :" << amount << endl; 

      f2.seekp(p,ios::beg); 

      f2 << amount << endl; 
     } 

    } 
} 

Hier ist, was die Datei looks like:

bank.txt 
123456789xyz savings 1200 
123456789pyr current 1600 
+2

man kann nicht eine bestimmte Position in einer Datei aktualisieren. Sie müssen alles lesen, ändern, schreiben – user463035818

Antwort

0

Das Problem ist sehr einfach, Ihr Dateiname ist bank.txt, aber Sie sind das Bestehen der ifstream und ofstream Objekt ctor nur Bank, wird dies nicht funktionieren, da wahrscheinlich die offene Operation wird stattdessen eine andere Datei öffnen,

ofstream f2("bank",ios::out | ios :: app); 
ifstream f1("bank",ios::in | ios :: app); 

Und zweitens kann man nicht die gleiche Datei gleichzeitig öffnen, können Sie stattdessen ein fstream Objekt

fstream fp("bank.txt",ios::in | ios::out | ios::app); 

Adressierung Ihre Frage verwenden können, verwenden fp.write() Funktion in die Datei, sein erster Parameter zu schreiben ist Der Zeiger auf die Zeichen, der zweite Wert ist die Anzahl der Zeichen, die in die Datei geschrieben werden sollen. Sie können also den zweiten Parameter entsprechend einstellen.

Es kann so aussehen:

char text [5] = "good"; 
// do the seekp operation. 
fp.write (text,5); 

Weitere know sehen diese http://www.cplusplus.com/reference/ostream/ostream/write/