Brauche hilfe



  • Hallo,

    ich hab da ein Problemmit C++ und zwar möchte ich in meinem Programm einen Text aus einer Textdatei (Zugriff.txt) mit einem zuvor in das Programm eingegebenen Text vergleichen!
    (Vorweg möchte ich noch erwähnen das meine Programmierkenntnisse nur die wirklich grundlegenden begriffe umfassen!)
    Ich hab das mal probiert mit nem kleinen Programm, indem ich zuerst eine Textdatei geschrieben habe mit 3 verschiedenen „Benutzernamen“ und den dazugehörigen Passwörtern.
    (Der Name besteht immer aus sieben Buchstaben und die Passwörter(oder PIN) aus jeweils 4)
    Das sieht etwa so aus:

    NAM:BenutzA
    PIN:abcd
    ----END---- (=nur zur besseren übersicht wenn es nachher mehr werden)
    NAM:BenutzB
    PIN:asdf
    ----END----
    NAM:BenutzC
    PIN:abab
    ----END----

    Ich möchte das wenn ich jetzt den Benutzernamen und das Passwort eingegeben habe, mich das Programm nur dann weiter lässt wenn es in der Textdatei enthalten ist!
    In Worten würde ich es so machen:

    Mache die Datei Zugriff.txt auf,
    Suche alle Einträge die mit NAM: beginnen,
    Vergleiche den Text dahinter mit dem zuvor eingegeben Passwort,
    Suche nun eine Zeile darunter nach PIN: ob das zuvor eingegeben Passwort mit diesem Eintrag übereinstimmt.
    Wenn alles stimmt dann weiter sonst Programm beenden (Das Weiter sollte ein anderes Proamm öffnen! Wie das geht weiß ich schon nur den Rest würde ich gerne kennen!
    Ps.: Würde ich evtl. mit if machen aber ich weiß ja nicht wie es geht)

    Bitte um Hilfe
    Danke schon im vorhinein 😕



  • Du kannst jede Zeile mit getline() einlesen und anschließend analysieren.



  • Entweder, du machst das so wie CStoll es vorgeschlagen hast, oder du gehst hin und legst dir eine Klasse User an. Dieser fügst du den operator>> hinzu. Darin kannst du es dann auch mit std::getline machen, muss aber nicht!



  • Wie mache ich Klassen? Bitte rerkläre mir das genauer!



  • Schau in eins der reichlich vorhandenen C++-Tutorials. Empfehlendwert meiner Meinung nach sind http://cpp-tutor.de/cpp/intro/toc.htm sowie http://www.fh-augsburg.de/informatik/vorlesungen/c_cplus/tutorial/henkel/

    MfG Mark



  • Naja mach's halt so, wenn du den Nutzer wirklich auf 7 und 4 Buchstaben begrenzen willst:

    class user
    {
        char m_name[8];
        unsigned int m_pin; // unter 32-bit PCs ist es sinnlos hier auf unsigned short zu setzen!
    
    public:
        friend std::istream& operator>>(std::istream& in, user& data)
        {
            (in.seekg(4, std::ios_base::cur)).getline(data.m_name, 8);
            (in.seekg(4, std::ios_base::cur)) >> data.m_pin;
            if (data.m_pin > 9999) in.setstate(std::failbit);
            std::string line_end;
            std::getline(in, line_end);
            if (line_end != "--- END ---") in.setstate(std::failbit);
            return in;
        }
    };
    

    jetzt bist aber du dran, das auf dynamische Namenslängen zu erweitern ... ließ dann aber die ganze zeile ein und nimm find, um den ':' zu finden.



  • Also der Ansatz, "if" zu benutzen, um eine Entscheidung zu fällen ist doch schon mal ein Schritt. Nicht so ein wirklich grosser, aber mach einfach weiter so. Zum Vergleichen von 2 Werten kannst Du ja "==" verwenden. Ansonsten würde ich mal ein Tutorial zu C++ durch arbeiten.

    Und zukünftig bitte etwas aussagekräftigere Titel. Du würdest keinen Thread aufmachen, wenn Du nicht Hilfe bräuchtest.



  • ich wuerds so machen

    //pseudo
    // - datei auslesen und in eine map packen
    std::map<CString, CString> all;
    while(text)
        all.insert(std::make_pair(strUser, strPW));
    
    // - eingaben annehmen, strEingabeUser und strEingabePW
    
    // - nach der eingabe in der map nach dem benutzer suchen
    std::map<CString, CString>::const_iterator iter = std::find(all.begin(), all.end(), strEingabeUser);
    if(iter != all.end())
        if(iter->second() == strEingabePW)
            //alles ok, eingabe passt
        else
            //user ok aber falsches PW
    else
        //user unbekannt
    

Anmelden zum Antworten