Probleme mit while Schleife...



  • Hallo bin ein Newbie und bräuchte Eure Hilfe:

    Ich möchte ein Programm schreiben, welches von der Konsole den Benutzernamen und das Passwort abfragt, dann eine Textdatei öffnet und die Eingaben überprüft.

    Meine Textdatei sieht so aus:

    2 // anzahl der einträge in der datenbank
    Fabian lucky
    Britta coco

    Mein Quelltext so:

    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    #include <string>

    using namespace std;

    int main()
    {
    string name,pwd,benutzer,passwort;
    ifstream datei;
    string dateiname = "passwort.txt";

    cout << "Name :";
    cin >> name;
    cout << "passwort :";
    cin >> passwort;

    datei.open(dateiname.c_str(),ios_base::in);
    int anzahl;

    datei >> anzahl;

    while(anzahl>=2)
    {
    datei >> benutzer >> pwd;
    anzahl -=2;
    }

    if(benutzer == name && pwd == passwort)
    {
    cout << "Login sucessfull!!" << endl;
    }
    else
    {
    cout <<"Login failed!!" << endl;
    }

    system("PAUSE");
    return 0;
    }

    so jetzt das problem:
    der login klappt bei Fabian, bei Britta nicht, obwohl ich den Benutzer
    Britta mit dem richtigen passwort coco eintippe,
    ich glaube, daß meine while schleife nicht richtig ist.

    Kann mir jemand helfen, und kurz erklären wie man while schleifen
    richtig aufsetzt, danke....
    🙂



  • Überprüfe doch einfach die Werte, die nach der Schleife drin sind und vergleiche diese mit denen, wie sie sein sollten.

    MfG MAV



  • ich weiß nicht genau was Du meinst. Wie würdest Du die Schleife denn
    programmieren?



  • Asterix, ich glaube eine for-schleife ist in deinem Fall besser.

    for(int i = 0; i < 2 ++i)
    {
         datei >> benutzer >> pwd; 
    }
    


  • Nach der 2 noch ein Semikolon



  • Tut mir leid aber jetzt liest er nur das Passwort von der Britta aus.
    Das von Fabian erkennt er diesmal nicht, hilfe.



  • Du liest ja auch immer in die selbe Variable ein, das heißt die zweiten Daten überschreiben die ersten. Damit klappt das nicht.

    Mach die Abfrage ob benutzername + Passwort stimmen mit in die Schleife beim auslesen rein und geh raus, wenn es stimmt, ansonsten prüfst Du so lange weiter, bis keine Werte mehr kommen.

    Die Bedingung in der for-Schleife sollte dann besser i<anzahl lauten. Dann funktioniert's auch mit mehr oder weniger Benutzern.

    Achja und in der Schleife mußt Du natürlich irgendwie deutlich machen, warum sie beendent wurde, durch finden des korrekten Namen+Passwort, oder weil keine Daten zum Vergleichen mehr da waren. Für den Anfang tut's da wohl ein bool-Flag, mittelfristig sollte sowas aber eher in ne Funktion.

    MfG Jester


Anmelden zum Antworten