2017-11-03 2 views
1

Ich schreibe ein Datenbankprogramm mit vielen Funktionen (Lesen, Schreiben, Löschen, Suchen, Login ect.) Und meine Schreibfunktion funktioniert nicht mehr (Es funktionierte vor 3 Tagen) und ich habe keine Idee was sich geändert hat. Meine Schreibfunktion (void savescore) soll meine Eingabe (cin Benutzername und Passwort) schreiben und dann zur nächsten Zeile wechseln, damit ich beim nächsten Mal mehr Informationen eingeben kann, wenn ich mich dazu entscheide, in die Datei zu schreiben. Im Moment ist es nur schriftlich über das, was ich das letzte Mal setzen inC++ Schreiben einer Zeichenfolge in eine Zeile in einer Textdatei; Neue Zeile Problem n funktioniert nicht

test2.txt -. Benutzername, Kennwort

Dann gehe ich zu bearbeiten und geben Sie „User, Pass“ und das ist, was passiert,

test2 .txt - User, Pass

Ich will es in der nächsten Zeile eingeben und ich habe "\ n" Kann mir jemand Hilfe geben? Dank

Code:

#include <iostream> 
#include <stdlib.h> 
#include <windows.h> 
#include <fstream> 
#include <conio.h> 
#include <string> 
#include <math.h> 

using namespace std; 

// Variables 
string username; 
string password; 

//alphabet order functions 

// Functions 
void SaveScore() 
{ 
    ofstream Database; 
Database.open("test2.txt"); 
Database << username << " " << password << "\n"; 


Database.seekp(0,std::ios::end); //to ensure the put pointer is at the end 
Database.close(); 
} 

int main() 
{ 

    int db; 

    char ans; 

    string save; 

    string file; 

    ifstream fin; 
    ofstream fout; 
    string searchpar; 

    char repeat; 
    bool loop = true; 
    while (loop == true) 
    { 

     cout << "WELCOME TO MY DATABASE\n\n"; 
     cout << "To view the database, press 1\nTo edit the database, press 2\nTo search the database, press 3\nTo log in, press 4\n"; 
     cin >> db; 
     system("CLS"); 

     if (db == 1) 
     { 
      cout << "Here is the database: \n\n"; 

      string line; 

      ifstream myfile("test2.txt"); 
      if (myfile.is_open()) 
      { 
       while (getline(myfile, line)) 
       { 
        cout << line << '\n'; 

       } 

      } 

      //open while bracket 
      cout << "\n\nWould you like to return to the menu(y/n)?"; 
      cin >> repeat; 

      if (repeat == 'y') 
      { 
       loop = true; 
      } 

      else if (repeat == 'n') 
      { 
       loop = false; 
      } 
      system("CLS"); 

     } 

     else if (db == 2) 
     { 

      cout << "Please enter your username : "; 
      cin >> username; 

      cout << "\nPlease enter your password: "; 
      cin >> password; 

      SaveScore(); 

      cout << "\n\nWould you like to return to the menu(y/n)?"; 
      cin >> repeat; 

      if (repeat == 'y') 
      { 
       loop = true; 
      } 

      else if (repeat == 'n') 
      { 
       loop = false; 
      } 
      system("CLS"); 

     } 
    } 

} 
+2

'Database.close();' Entfernen Sie dies, es ist zu früh. – user0042

+0

Auch nicht notwendig. 'ofstream' [wird unter Berücksichtigung von RAII implementiert] (https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization) und wird für Sie bei der Vernichtung geschlossen. – user4581301

+0

Wie erwarten Sie 'Database.seekp()' nach 'Database.close()'? Was glauben Sie, was Database.close() 'tut? –

Antwort

0

Sie sagen, Ihr Programm

ist die erste Zeile der Textdatei jedes Mal zu ersetzen Ich versuche, etwas Neues zu schreiben hinein

Wie stellt sich heraus, genau das haben Sie von ihm verlangt. Bedenken Sie:

Database << username << " " << password << "\n"; 
Database.seekp(0,std::ios::end); //to ensure the put pointer is at the end 

Sie die Datei zu öffnen (wenn der Schreibzeiger auf dem Anfang der Datei beginnt, einige Daten zu schreiben, und dann bis zum Ende der Suche nach der Suche nach bis zum Ende, dass Sie nicht die Tatsache ändern‘. haben schon den Text geschrieben, um die Reihenfolge der obigen Zeilen tauschen zu bekommen, was Sie wollen

Alternativ können Sie die Datei in „anhängen“ Modus geöffnet werden:..

Database.open("test2.txt", std::ios::app); 

in dieser Situation können Sie den Aufruf an seekp komplett weglassen, da alle Daten automatisch werden tlich an das Ende der Datei geschrieben werden. Eine vollständige Dokumentation hierzu finden Sie unter http://en.cppreference.com/w/cpp/io/basic_ofstream/basic_ofstream.

+0

Vielen Dank! Am Ende habe ich Database.open ("test2.txt ", std :: ios :: app); und es hat funktioniert! Vielen Dank nochmal alle für Ihre Hilfe. –

Verwandte Themen