Was mach ich falsch?



  • Also hab hier diesen Code geschrieben der ein Passwort abfragen soll und dann entscheiden soll ob sich der Chef oder ein Mitarbeiter einloggt....

    Das Problem ist das wenn ein falsches Passwort eingegeben wird, fragt das Programm nicht noch einmal nach dem Passwort sondern sperrt den Zugang.
    Wäre nett wenn mir jemand sagen könnte wo mein Fehler liegt.

    #include <iostream>
    #include <conio.h>
    #include <string>
    
    using namespace std;
    
    int main() {
    	char buchstabe;
    	string eingabe, PasswortChef="Entropie 46\0", PasswortMitarbeiter="4 Mb Ram\0";
    	int fehler=0;
    
    	do{
    		cout << "\n\n\tPasswortabfrage fuer Server Raum" << endl << endl;
    		cout << "\tGeben sie das Passwort fuer den Zugang ein: ";
    
    		while(buchstabe != 13) {
    
    			buchstabe = getch();
    
    			if(buchstabe != 13){
    				eingabe += buchstabe;
    				cout << "*" << flush;
    			}
    		}
    
    		//cout << endl << eingabe << endl;
    
    		if(eingabe == PasswortChef) {
    			cout << "\n\n\tWillkommen Chef!" << endl << endl;
    			break;
    		} else {
    			if(eingabe == PasswortMitarbeiter) {
    				cout << "\n\n\tWillkommen Mitarbeiter" << endl << endl;
    				break;
    			} else{
    				if(fehler!=3) {
    					cout << "\n\nSie haben leider das Passwort falsch eingegeben, versuchen sie es nochmal.\n";
    					cout << "Noch " << 3-fehler << " Versuche bis der Zugang gesperrt wird!" << endl << endl;
    					fehler++;
    					eingabe="";
    				} else {
    					cout << "\n\n\tIhr Zugang wurde gesperrt!" << endl << endl;
    					break;
    				}
    			}
    		}
    	}while(fehler<3);
    
    	return 0;
    }
    


  • Hallo

    while(buchstabe != 13)
    

    Da fragst du doch eine Variable ab, in der nur undefiniertes Zeug steht.

    chrische



  • Habe soetwas hier eingefügt, dann läuft es..
    (buchstabe wieder != 13 setzen)

    ----> buchstabe=0;
    if(eingabe == PasswortChef) {

    Dadurch ist buchstabe wieder !=13.
    Denn nach Eingabe eines Enter wird er 13 und bleibt es auch,
    da die while-Schleifen erst wieder buchstabe neu zuordnen,
    wenn buchstabe wieder != 13 ist.
    Da in deinem Fall aber buchstabe 13 ist, werden die while-Schleifen
    nicht mehr durchlaufen.

    Gruß,
    DC



  • while((buchstabe=getche())!=13){
        eingabe += buchstabe;
        cout << "*" << flush;
    };
    

    So kannst du dir das if sparen.



  • ok, alles klar....danke an alle



  • Und wenn ich mich recht entsinne kannst du dir so das:

    buchstabe=0;
    

    Bei den Abfragen der Passwörter sparen, da ja buchstabe bei jedem while neu gesetzt wird... Oo


Anmelden zum Antworten