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'; wegUnsinn, 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 viastring password;