Login
-
es liegt an deinem compiler. und zwar daran, dass er
a) veraltet oder
b) alte standards unterstützt...Aber: Don't feed the trolls...
-
@Michael E.: Ich wollte ja damit nicht sagen, dass man das so machen muss, sondern (genau das gleiche was du gesagt hast), dass das bei einigen Compilern eben funktioniert
@cin: Eher das 2.. Und: Falls du dich auf das bezogen hast:Ich habe geschrieben schrieb:
Soll ich euch das Programm ma schicken? Bei mir hat das so funktioniert! Das kann dann nur an deinem Compiler leigen.
Damit wollte ich nicht trollen, sondern das war ernst gemeint (mir ist zwar im Nachhienein eingefallen, dass das gar nichts bringt, da ihr den Quellcode dann immer noch nicht seht, aber das ist dann wieder eine andere Geschichte...).
Mfg Ominion
-
-
Von Bjarne persönlich: http://public.research.att.com/~bs/bs_faq2.html#void-main
Nur weil etwas auf einem Compiler läuft muss das nicht auf nem anderen laufen, wie du eben gesehen hast. Deswegen ist es so wichtig sich an den Standard zu halten, wenn man portabel sein möchte.
-
Also danke erstmal an alle die hier so fleissig gepostet haben.
Mit einer solch großen Resonanz hätte ich nicht gerechnet.
In der Schule haben wir damals void main() benutzt bevor wir zu funktionsaufrufen kamen und deswegen ist das noch hängen geblieben.Bei mir funktioniert es auch, liegt wohl daran das ich den Borland Builder 4 benutze. War der einzige den ich hier so rumliegen hatte und mit dem ich alles gelernt habe, deswegen wollte ich den auch weiterhin benutzt. Wußte nicht das damit schon in der Steinzeit lebe xD
Ich habs nun bei mir angepasst und es funktioniert fast alles Prima. Nur wenn ich den falschen Wert eingebe, dann sagt er zwar verweigert allerdings ist der neue Login dann genau drunter und sieht irgendwie "komisch" aus. Er löscht das "verweigert" nicht raus mit clrscr(); sondern behält es bei bis ich eben den richtigen Login habe. Liegt das nun wieder an meinem Builder?
Und ne kleine Frage noch. Wie kann ich einen ausgebenden Text langsamer anzeigen lassen? Also nicht das plötzlich alles zu lesen ist sondern er alles langsamer aufbaut, als wäre mein Rechner uralt mit der Rechenpower einer ausgedrückten Zitrone
Ich hoffe ich habe mich halbwegs korrekt ausgedrückt.Vielen Danke schonmal an alle
mfg
Maddyn
-
Hi
Du solltest das clrscr();
vor der ersten Ausgabe aufrufen, also gleich nach dem while..
-
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?