if Verzweigung erkennt Passwort nicht



  • Hollöle,

    hier der Quellcode, wie ich mein Passwort auf dem Bildschirm als "*" darstelle:

    char temp;
           string passwort, richtigespw = "123";
           int index = 0;
    
         while ((temp = getch()) != 13)    
         {
           printf ("*");
           passwort[index++] = temp;
           passwort[index] = '\0';    
         }
    

    und danach möchte ich durch eine if Verzweigung kontrollieren ob das Passwort richtig ist.

    if (passwort == richtigespw) 
    {
      //Anweisung
    }...
    

    Aber passwort wird nicht richtig erkannt, auch wenn ich das richtige Passwort eingebe. Ich weiß das mein Fehler im ersten Quellcode liegt (wo die Ausgabe als "*" erfolgt), dadurch beinhaltet der String passwort nicht mehr die eingegebenen Zeichen. (benutze C++)
    Hoffe jemand kann helfen 😉



  • ...



  • ja ist doch klar kollege

    du liest einen char ein, schiebst den in den string und überschreibst ihn da wieder mit 0

    lass mal das passwort[index] = '\0'; weg



  • Also der Operator == funktioniert. Wie gesagt die Umwandlung in "*" is das Problem, vieleicht kennt jemnad eine elegantere Lösung. So das die Zeichen des Strings nich verfälscht werden. 😕



  • oneill5000 schrieb:

    nutze string vergleichsfunktionen/methoden! glaube nicht das er mit "==" den inhalt der beiden strings vergleicht.

    Klar, wenn's sich um std::string-Objekte handelt, klappt das.

    Skym0sh0 schrieb:

    du liest einen char ein, schiebst den in den string und überschreibst ihn da wieder mit 0
    lass mal das passwort[index] = '\0'; weg

    Unsinn, der Index wird doch nach dem Reinschreiben des Chars erhöht, womit die Position hinter dem neuen Char auf '\0' gesetzt wird.

    oneill5000 schrieb:

    und den string mit [index++] füllen funktioniert?

    Genau da müsste das Problem liegen. Mit push_back arbeiten und das '\0' weglassen, sonst ist jedes zweite Zeichen ein '\0'.



  • nicht nur das jedes zweite zeichen dann ein \0 ist, sondern es ist eh überflüssig. std::string enthält das ja bereits. wir gehen einfach mal davon aus das es ein std::string ist.



  • Bin noch nicht so gewannt in c++. Könntes du mir das mit push_back genauer erklären. Ich weiß ja das \0 bedeutet der String ist hier zuende.



  • so sollte es gehen

    #include <string>
    #include <iostream>
    #include <conio.h>
    
    using namespace std;
    
    int main()
    {
        char temp;
        string passwort="", richtigespw = "123";
        int index = 0;
        passwort.clear();
        while ((temp = getch()) != 13)
        {
            printf ("*");
            passwort += temp;
        }
        cout << passwort << endl;
    	cin.get();
    	return 0;
    }
    


  • Hey danke jetzt erkennt der mein Passwort und die if Verzweigung funktioniert auch einwandfrei! 😃 😃 😃
    DANKE :xmas1:



  • Ja, das Problem bei Deiner ursprünglichen Version ist/war, daß Du Stringelemente indiziert hast, die möglicherweise gar nicht vorhanden waren.
    Bei der Definition des Strings via

    string password;


Anmelden zum Antworten