Daten einlesen



  • // Bankautomat.cpp - Simulation eines Bankautomaten mit 3 Konten
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstdlib>
    using namespace std;
    
    void wait()
    {
      cin.clear();
      cin.ignore(cin.rdbuf()->in_avail());
      cin.get();
    }
    
    int main()
    {
    
      ifstream dat_ein;
      string daten = ("daten.txt");
    
      dat_ein.open(daten.c_str(), ios_base::in);
    
      if(!dat_ein)
      {
        cout << "Die Datei konnte nicht geöffnet werden" << endl;
        cout << endl;
        return -1;
      }
    
      int anzahl;
    
      string name, pin;
    
      string benutzername;
      string pinnummer;
    
      int loop;
    
      dat_ein >> anzahl;
    
      // Benutzerdaten immer wieder abfragen
      loop = anzahl;
      while (loop == 3)
      {
    
        dat_ein >> name >> pin;
    
      cout << "Benutzername" << endl;
      cin  >> benutzername;
    
      cout << "Pinnummer" << endl;
      cin  >> pinnummer;
    
      if (name == benutzername && pin == pinnummer)
      {
        cout << "Sie können nun Geld abheben oder einzahlen" << endl;
      }
      else
      {
        cout << "Falsche Eingabe" << endl;
      }
    
      }
    
        dat_ein.close();
    
    }
    

    Ich möchte folgendes 2.Aufgabe
    Hab den Code jetzt mal geändert, aber jetzt habe ich ein anderes Problem: In meiner Datei daten.txt habe ich drei Datensätze, aber sobald ich die ersten eingegeben habe und nochmal den ersten eingeben möchte (mit Benutzenamen und Pinnummer) sagt er mir andauernd "Falsche Eingabe", ganz so, als ob er in der daten.txt nach dem dritten Datensatz drunter weiterliest, obwohl da nichts mehr ist.
    http://img75.imageshack.us/img75/7581/bildog1.th.png

    Bin übrigends noch ein totaler Anfänger, also nehmt es mir nicht übel^^

    Dae



  • Was hast du hier bloß gemacht??? 😮 😕 🙄

    Auf den ersten Blick:
    1. if (name == name, pin == pin) Komma bei if ist ungewöhnlich -> logisches Und &&
    2. name == name Eine Variable mit sich selbst zu vergleichen ist auch nicht gerade sinnvoll
    3. loop = 2 * datensatz; datensatz ist garnicht initialisiert.
    4. while(loop == 5) hier passiert garnichts, denn loop ist durch 3 teilbar, und somit niemals 5. Das wird also übersprungen.
    5. dat_ein >> name >> pin; in einer Schleife ist sinnlos, weil am Ende nur der letzte eingelesene Wert darinsteht
    6. void wait(); in main? eine lokale Funktion? Mach das ganze global.

    Hast du dir überhaupt überlegt was das mal werden soll? 🙄



  • *update*

    -neuen Quelltext eingefügt
    -mit Bild Problem erläutert (hoff ich doch)

    Dae



  • Daeran schrieb:

    ganz so, als ob er in der daten.txt nach dem dritten Datensatz drunter weiterliest, obwohl da nichts mehr ist.

    Genau das passiert auch 😉 Das "ifstream"-Objekt merkt sich, wo es gerade in der Datei ist. Wenn du weitere Sachen einliest, verschiebt sich auch die Position, nach der dritten Eingabe ist die nun mal am Ende der Datei.

    Mein Vorschlag wäre: Lass den Benutzer den Benutzernamen und das Passwort eingeben und durchsuche dann die komplette Datei, ob Benutzername+Passwort darin enthalten sind. Also Zugangsdaten eingeben, Datei durchsuchen, entsprechend ja oder nein. Und das jede Runde.
    Als Fortgeschrittenen-Version könntest du auch am Anfang des Programms alle Benutzernamen mit zugehörigem Passwort in einen geeigneten Container einlesen (z.B. std::vector) und dann die Datei in Ruhe lassen und stattdessen nur deinen Container nach Name+Passwort durchsuchen.


Anmelden zum Antworten