Passwortabfrage



  • Also ich habe folgenden quellcode.
    Dort will ich 2 sachen vergleichen.
    Ein vorgegebenes wort mit einem eingegebenen.
    Leider functioniert das nicht.

    Kann mir vieleicht einer einen kleinen hinweis geben wo der fehler liegt? (Oder einen Wink mitm Zaunpfahl)

    #include "stdafx.h"
    #include <iostream>
    #include <stdio.h>
    #include <string>
    
    using namespace std;
    
    void main()
    {
    
    	char s[5];
    	char a[50] = "auto";
    
    	scanf("%s", &s);
    	printf("%s\n", s);
    	printf("%s\n", a);
    
    	if(a != s)
    	{
    		cout<<"yeah";
    	}
    
    }
    

    Also wie gesagt. Das soll wenns fertig ist eine passwortabfrage werden.
    das da sterne stehen mache ich mir dann später sorgen drumm...

    Have Fun
    Sqwan



  • strcmp oder std::string.



  • Danke. Das war sehr hilfreich.
    Meine abfrage klappt jetzt und er unterscheidet ob das pw richtig ist oder nicht.

    Jetzt die sache mit den sternen.
    Kanns da auch noch en Wink mitm zaunpfahl geben?
    Wäre echt super...

    Have Fun
    Sqwan



  • Das Consolen FAQ hilft eventuell.

    C++ liefert IMHO keine Möglichkeit die eingabe mit einem * auf dem Bildschrim zu ersetzen



  • Auch wenn das jetzt ein Wink mit dem Eifelturm ist aber:
    In der FAQ steht schon was dazu, einfach mal durchgucken.



  • och menno...musste das denn sein? ich will doch nur einmal erster sein *in die ecke kriech und heul*



  • Naja, in der Ecke warste der erste 🤡



  • Also thx schon mal wegen der hilfe.
    Leider hat mir bis jetzt ein wink mit dem Eifelturmm
    nicht geholfen.
    Wenn cih auf FAQ klicke habe ich 100 möglichkeiten zu suchen.
    Wo muss ich suchen und wonach?

    Sorry. Aber der Eifelturm konnte mich bis jetzt leider nicht zum ziel bringen.
    Vllt könnte einer einen befehl posten nach dem ich mal googlen kann oder?

    MFG Sqwan



  • Also cih ahbe es nun endlich gefunden...
    war nicht im C++ bereich.
    Nur gut das es google gibt...

    also:

    #include <iostream> 
    #include <string> 
    #include <conio.h> 
    
    std::string readPassword (char replace = '*') 
    { 
        std::string password; 
        char now = '\0'; 
    
        while(now != '\r') 
        { 
            now = getch(); 
    
            // Sonderzeichen ignorieren 
            // Bestehen aus 2 Zeichen - also nochmals getch() aufrufen 
            // Siehe FAQ-Beitrag "Einlesen von Pfeiltasten, F-Tasten und Tastenkombinationen" 
            if(now == 0 || now == 0xE0) 
            { 
                getch(); 
                continue; 
            } 
    
            // Steuerzeichen ignorieren (Haben ASCII-Codes kleiner als 32) 
            if(now < 32) 
                continue; 
    
            // Zeichen anhängen und Ersatzzeichen ausgeben 
            password += now; 
            std::cout << replace; 
        } 
        return password; 
    }
    

    Und wie verarbeitet man das?
    an das passwort komme ich ja garnicht ran....
    bzw ich kann nicht ausgeben oder so...



  • Du solltest dir Funktionen ansehen. Die obrige erfüllt zwei Aufgaben: ersetzt die Eingabe durch * und gibt die Eingabe zurück.
    D.h. du schreibst in deine main z.B.:

    string pwd= readPassword();
    

    Die Eingabe wird verschleiert, und gleichzeitig steht diese in pwd.

    Standardmäßig wird die Eingabe durch * ersetzt. Wenn du die an die Funktion in anderes Argument übergibst (z.B. '#') ersetz dieses die Eingabe.



  • Soweit bin ich auch schon gewesen.
    Allerdings mit char anstadt string.

    Trotzdem immernoch ein laufzeitfehler beim ausgeben:

    void main(char password)
    {
    	string pwd = readPassword();
    	printf("%s", pwd);
    }
    

    was ist falsch?



  • Falsch ist, dass die C-Funktionen den Datentyp string nicht kennen. In C++ macht man Ausgaben mit Hilfe von Streams. Um auf die Standardausgabe zu schreiben benutzt man cout:

    #include <iostream>
    #include <string>
    std::string str("Hallo");
    std::cout << str;
    

    Mit printf würde es so aber gehen, wenn du den String in einen const char* konvertierst und das macht die string-Methode c_str():

    #include <string>
    std::string str("Hallo");
    printf("%s", str.c_str());
    

    Greetz



  • Danke. das habe ich gebraucht.
    Damit ist mein problem gelöst.
    Herzlichen dank an alle.

    Have Fun
    Sqwan



  • printf("%s", pwd);
    

    Sollte garnicht compilieren, da pwd ein UDT (std::string) ist - und vararg mit UDT isse nicht erlaubt. Der MSVC frissts dummerweise trotzdem, und nur damit man einen CString in einem printf/TRACE/... auch für ein "%s" verwenden kann. Blöder MSVC 😞 Dadurch entstehen dann solche Fehler.


Anmelden zum Antworten