Benutzereingaben speichern [C++]

Hallo zusammen, hab wieder mal ne Frage :P.

Ich möchte in C++ ein Programm schreiben dass zB. Adressen vom benutzer abfragt und dan speichert. Und nach einem neustart des Programms sollten sie wieder verfügbar sein.

Ich habe also den Quelltext:

#include <iostream>
using namepsace std;

int main()
{
int Addresse;
cout << "Gib eine Addresse ein.";
cin >> Addresse;

cout << "Du hast diese Addresse eingegeben: " << Addresse
<< endl;
return 0;
}

----------------------------------
So wie kann ich nun machen das ehr auch mehrere Addressen speichert und ich sie Abrufen kann?
Und wie kann ich machen dass er eine Textdatei schreibt mit den eingegebenen Addressen?

Und wie kann ich machen dass auch nach schliessen des Programms, die Addressen noch enthalten sind?

MFG Compilerjunge123
:thumb_up:
 
So wie kann ich nun machen das ehr auch mehrere Addressen speichert und ich sie Abrufen kann?
Sammle die Adressen in einem Container, z.B. einem std::vector:
Code:
#include <vector>
#include <iostream>
#include <string>
using namespace std;

int main() {
  vector<string> adressen;
  while(true) {
    string adresse;
    cin >> adresse;
    adressen.push_back(adresse);
  }
  //mittel indizes kommst du an den vektorinhalt
  cout << adressen[0] << endl; //dies ist die erste adresse
  //die ausgabe solltest du zur übung mal selber schreiben.
  //wenn dir die sache mit den indizes nicht gefällt probier mal iteratoren
  for(vector<string>::iterator i = adressen.begin(); i != adressen.end(); ++i) {
    cout << *i << endl; //* greift auf das element zu auf das der Iterator zeigt
  }
  return 0;
}
Eine Textdatei nutzt man mittels fstream:
Code:
#include <fstream>
using namespace std;

int main() {
  fstream file;
  file.open("Pfad/zur/datei");
  file << "Sachen rein" << endl;
  string raus;
  file >> raus;
  file.close();
  return 0;
Und wie kann ich machen dass auch nach schliessen des Programms, die Addressen noch enthalten sind?
Gar nicht, das geht nur über Dateien.
 
Ok und kann ich da irgendwie machen dass das Programm eine "Sicherungsdatei" erstellt und dan beim neustart diese Abruft?

Thy

-------------------------------------
EDIT

ICh kenn mich da nicht so gut aus, aber wenn ich dein Beispielprogramm starte kann ich einfach was eingeben. Aber wie kann ich das wieder abrufen?

Thx für die Antwort
 
Zuletzt bearbeitet:
Das musst du eben manuell machen. Du hast deine Daten im Programm (hier als Strings) und musst diese so in die Datei schreiben, sodass du sie wieder auslesen kannst. Beispielsweise kannst du jede Adresse auf eine neue Zeile schreiben, indem du immer ein endl in den Stream schreibst. Der >> Operator liest ohnehin nur bis zum Zeilenende, sodass du automagisch deine Datensätze zurückbekommst. Ergo baust du am Programmanfang eine Schleife ein, die die Daten aus der Datei zeilenweise einliest und in dem vector speichert. Dann arbeitest du mit den Daten im vector und fügst eventuell neue hinzu, bis du am Programmende den ganzen Vektor zurück in die Datei schreibst, die du zuvor leeren solltest.
 
Okeee. Ich hab das theoretisch verstanden, aber könntest du mir vieleicht ein Programmbeispiel dazu machen?

Ausserdem kenne ich mich in C++ nicht EXTREM gut aus. (Grundlagen schon) aber die befehle für das Auslessen, dateien erstellen kenne ich nicht.
Kannst du mir da vieleicht einen Link wo das erklärt ist geben?

Cu
Compilerjunge123
 
bad_alloc hat doch eh einige Codebeispiele geposted, Links zum Thema File-Handling in C++ findest du zum Beispiel hier: FILE - C++ Reference

Bei deinem Beispiel könnte das z.B. so aussehen:
Code:
int main()
{
    FILE* fp;
    char str[255];
 
    // Ausgeben der gespeicherten Adressen
    fp = fopen("adressen.txt","r");
    cout << "Bereits gespeicherte Adressen:" << endl;
    if (fp) {
        while (!feof(fp))
            if (fgets(str, 255, fp) != NULL)
                cout << str;
    }
    else
        cout << "Noch keine Adressen gespeichert." << endl;
    fclose(fp);
 
    // Neue Adressen hinzufügen
    fp = fopen("adressen.txt","a");
    if (fp) {
        for (;;) {
            cout << "\nGeben sie eine Adresse ein: ";
            gets(str);
            if (strcmp(str, "") != 0) { // -> leere Eingabe beendet die Schleife
                fputs(str, fp);
                fputs("\n", fp);
            }
            else
                break;
        }
    }
    fclose(fp);
    return 0;
}
 
dafuq, dafuq schreibst du da? :D Das ist C gemischt mit C++. IMHO sollte man das bei reinem C++ halten, damit man sich den C-Kram garnicht erst angewöhnt:
Code:
int main()
{
  //Dieser Code habe ich von dafuq übernommen und leicht modifiziert
  fstream file;
  
  // Ausgeben der gespeicherten Adressen
  file.open("adressen.txt");
  cout << "Bereits gespeicherte Adressen:" << endl;
  if(file) {
    while (file.eof())
      cout << file << endl;
  } else {
    cout << "Noch keine Adressen gespeichert." << endl;
  }
  file.close();
  
  // Neue Adressen hinzufügen
  fstream file;
  file.open("adressen.txt");
  if (file) {
    for (;;) {
      cout << "\nGeben sie eine Adresse ein: ";
      string adr;
      cin >> adr;
      cout << endl;
      if (adr == "") { // -> leere Eingabe beendet die Schleife
    break;
      }
      else {
    file << adr << endl;
      }
    }
  }
  file.close();
  return 0;
}
 
IMHO sollte man das bei reinem C++ halten, damit man sich den C-Kram garnicht erst angewöhnt.
Das ist bei mir schon zu spät :P. Da C++ eine Fortsetzung von C ist, finde ich das aber auch nicht so tragisch. Im Allgemeinen ist mir zwar OOP auch lieber, da ich aber mit fstream nicht vertraut bin, hab ich mich auf die Schnelle für die C-Variante entschieden. ;-)
 
Will euch ja nicht nerven aber giebts diese Erklärungen auch in Deutsch?
ich bin leider im technischen (und normalen) englisch nicht sehr gut ;-(

Danke vielmals :)
 
Wenn du die hier verlinkten Seiten nicht verstehst, dann wirst du bei dem Thema Programmieren scheitern. Garantiert, denn für die Thematik muss man zumindest so viel Englisch beherrschen um ein paar manpages und Online-Referenzen zu verstehen. Aber ich würde mich nicht entmutigen lassen, versuch es zu lesen. Und wenn du es nicht verstehst: Versuche es noch einmal. Und wenn es immer noch nicht klappt: Schlage ein paar Wörter in einem Wörterbuch nach und fahre mit Schritt 1 fort. :wink:

mfg benediktibk
 
Oder such dir ein Einsteigerbuch auf Deutsch. Da gibbet viele gute Werke. Ich kann z.B. "Jetzt lerne ich: C++" von Liberty und Hovath empfehlen (damit hab ich mal angefangen). Willst du dich aber tiefergehend mit Programmierung beschäftigen, solltest du dich wirklich parallel dazu mit Englisch auseinandersetzen.
 
Zurück
Oben