Login
-
ok vielen dank habs hinbekommen.
ich merk das ich nun aber keine verschaltelungen von if und else machen kann.
Gibs da andere möglichkeiten? Achja hier das was ich versucht habe://------------------- Login -------------------- #include <iostream> #include <conio> #include <iomanip> #include <string> using namespace std; void main() { //------------------------------------------- Variablenvereinbarung ------- string login; bool authorized; //------------------------------------------- Progi starten --------------- authorized = false; while( !authorized ) { gotoxy (15,14); cout<<"Logon:\n"; gotoxy (15,15); cout<<"------\n"; gotoxy (15,17); cin>>login; clrscr(); if (login == "yoshua") { clrscr(); gotoxy (15,10); cout<<"*** Login Erfolgreich ***\n"; gotoxy (15,12); cout<<"-------------------------\n\n"; gotoxy (15,20); cout<<"supported by MySelf xD!!!"; authorized = true; } else { if (login == "list games") { cout<<"Schach"; cout<<"dame"; authorized = true; } else { clrscr(); gotoxy (15,10); cout<<"*** Verweigert ***\n"; gotoxy (15,11); cout<<"------------------\n\n\n"; } } } // end while getch(); }Also es funktioniert auch nicht wenn ich das authorized = true; rauslasse.
-
#include <iostream> #include <windows> #include <string> using namespace std; int main () { string loginuser = "User"; string loginpass = "passwort"; string user; string pass; bool login = false; while (!login) { cout << "Loginname: "; cin >> user; if (loginuser == user) { cout << "Loginpasswort: "; cin >> pass; if (loginpass == pass) { cout << endl; cout << "Login erfolgreich!" << endl; login = true; } else { cout << endl; cout << "Das Passwort ist leider nicht korrekt." << endl; cout << endl; login = false; } } else { cout << endl; cout << "Der Name ist leider nicht korrekt." << endl; cout << endl; login = false; } } Sleep (2000); return 0; }Also ich habe das jetzt mal schnell eingetippt. Das müsste so funktionieren. Du kannst ja mal gucken, was du übernimmst oder was du an deinem Programm änderst. Das ist jedensfalls eine Möglichkeit, die so funktionieren müsste (habe versucht, die an deine anzulehnen).
Mfg Ominion
-
cin>>login;Änder das zu
getline(cin, login);die Folge ist, dass nicht bis zum nächsten Leerzeichen, sondern bis zum nächsten \n nach login kopiert wird.
-
Ominion: Grausam. Versuch mal nicht so tief zu verschachteln:
// nur Struktur verändert #include <iostream> #include <windows> #include <string> using namespace std; int main () { string loginuser = "User"; string loginpass = "passwort"; string user; string pass; bool login = false; while (!login) { cout << "Loginname: "; cin >> user; if (loginuser != user) { cout << "Der Name ist leider nicht korrekt." << endl; continue; } cout << "Loginpasswort: "; cin >> pass; if (loginpass != pass) { cout << "Das Passwort ist leider nicht korrekt." << endl; continue; } cout << "Login erfolgreich." << endl; login = true; } Sleep (2000); return 0; }
-
An continue habe ich so schnell garnicht gedacht! Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht
Mfg Ominion
-
@Maddyn: Du kannst das else auch weglassen!
Mfg Ominion
-
Ominion schrieb:
Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht
Schwachsinn, genau das war Maddyns Problem, denn wie dir selbstverständlich aufgefallen ist, besteht "list games" aus zwei Wörtern.
-
~Ist mir nicht aufgefallen! *in die Ecke verkriech*~
Ok Maddyn:Ominion schrieb:
Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht
Diese Stelle brauchst du nicht zu beachten

Mfg Ominion
-
Michael E. schrieb:
Ominion: Grausam.
Na dann kann mans aber auch gleich so schreiben:
#include <iostream> #include <windows> #include <string> using namespace std; int main (void) { string loginuser = "User"; string loginpass = "passwort"; string user; string pass; while (1) { cout << "Loginname: "; cin >> user; cout << "Loginpasswort: "; cin >> pass; if ((loginuser == user) && (loginpass == pass)) { cout << "Login erfolgreich." << endl; break; } cout << "Name und Passwort stimmen nicht überein!" << endl; } Sleep (2000); return 0; }
-
Es soll ja nur weiter gehen, wenn der Username überhaupt vorhanden ist. Aber trotzdem ne gute Idee.
Mfg Ominion
PS: Ihr müsst euch nicht weiter um meinen Code kümmern. Ich habe damit kein Problem.
-
immigrant: Ich würd so eh keinen Login schreiben. Es ging mir nur darum, aus der Megaverschachtelung rauszukommen.
-
Ominion schrieb:
Es soll ja nur weiter gehen, wenn der Username überhaupt vorhanden ist.
Jetzt bin ich allerdings gespannt, wie hierfür die Begründung aussieht.
-
Michael E. schrieb:
Jetzt bin ich allerdings gespannt, wie hierfür die Begründung aussieht.
Was meinst du damit?
Mfg Ominion
-
Es mag zwar etwas lächerlich erscheinen, wenn ich bei diesem Code mit Sicherheitsfragen anfang, aber wieso sollte ein Brute-Forcer merken, dass er schon mal den richtigen Benutzernamen herausgefunden hat und nur noch nach dem richtigen Passwort zu suchen braucht?
-
Das meinst du. Ich bin jetzt nicht vom bösen Willen, sondern vom guten Willen der Benutzerausgegangen. Und deshalb finde ich es besser, wenn er nicht erst die Eingaben machen muss, sondern gleich gesagt bekommt, dass da was falsch ist.
Mfg Ominion
PS: Wenn man aber vom Bösen im Menschen ausgeht, ist dein Argument besser als meins.
-
Ominion schrieb:
Das meinst du. Ich bin jetzt nicht vom bösen Willen, sondern vom guten Willen der Benutzerausgegangen.
Aiaiai

-
Hallo,
ich beschäftige mich grade mit buffer Overflow und wollte wissen, ob das nicht zimlich gefährlich ist:#include <iostream> #include <windows> #include <string> using namespace std; int main (void) { string loginuser = "User"; string loginpass = "passwort"; string user; string pass; while (1) { cout << "Loginname: "; cin >> user; cout << "Loginpasswort: "; cin >> pass; if ((loginuser == user) && (loginpass == pass)) { cout << "Login erfolgreich." << endl; break; } cout << "Name und Passwort stimmen nicht überein!" << endl; } Sleep (2000); return 0; }
-
Tut mir leid, ich seh grad keine Gefahr für einen Buffer Overflow. Wo ist es deiner Ansicht nach gefährlich?
Viel überzeugender ist doch, dass jeder Depp mit Notepad das Passwort aus der exe lesen kann

-
joasdoj schrieb:
wollte wissen, ob das nicht zimlich gefährlich ist: [...]
wie kommst du darauf??
-
Es sollte ja auch nur eine Übung sein, und nicht unbedingt sicher.
Mfg Ominion