F4KE Geschrieben 5. November 2008 Geschrieben 5. November 2008 Hallo, folgendes Problem ich habe dieses Programm geschrieben .... //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include<iostream.h> #include<conio.h> #include<string.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { // Variablendekleration char passwort[20]="levent",eingabe[20]="",zeichen,gefunden='n'; int i=0, versuch=0; // Eingabe do { versuch++; cout<<"\nBitte Passwort eingeben "<<versuch<<". Versuch "; while (zeichen!=13) { zeichen=getch(); cout<<"*"; if (zeichen!=13) { eingabe=zeichen; i++; } } if (strcmp(eingabe,passwort)==0) gefunden='j'; else { cout<<"\nPasswort nicht richtig"; zeichen='\0'; for (i=0; i <=19; i++) eingabe=zeichen; zeichen=' '; i=0; cout<<"\n Bitte eine Taste druecken "; getch(); } } while (versuch<3 && gefunden=='n'); if (gefunden=='j') cout<<"\nSie haben Zugang zum System "; else cout<<"\nSie haben keinen Zugang zum System "; getch(); getch (); return 0; } //--------------------------------------------------------------------------- bei der Eingabe des Passwortes, erscheinen Sternchen was ja auch so sein soll, aber wenn ich mich vertippt habe und dann backspace drücke, wird das angebliche löschen auch als eine Eingabe erkannt, das heist ich kann kein buchstaben löschen. ich habe mir gedacht das dies mit einer rückwärtsschleife funktionieren könnte nur leider bekomme ich es leider nit auf die reihe ...... Zitieren
F4KE Geschrieben 5. November 2008 Autor Geschrieben 5. November 2008 hat denn keiner eine idee wie das funktionieren könnte ... Zitieren
TDM Geschrieben 5. November 2008 Geschrieben 5. November 2008 Getch liest auch Steuerzeichen mit, Enter, Backspace, Cursortasten etc pp. Enter fängst du ja schon mit if (zeichen!=13) ab. Wenn du z.B. nur Buchstaben willst, dann musst du zeichen auf >= 'A' und <= 'Z' bzw. die Minuskel prüfen. Außerdem musst du bei Backspace den Cursor der Console (ich nehme mal an, dass es eine Consolenanwendung ist) um eins zurückspringen lassen. Zitieren
F4KE Geschrieben 5. November 2008 Autor Geschrieben 5. November 2008 wenn ich das passwort eingebe und backspace drücke dann soll er ja den zuletzt gedrückten buchstaben löschen, macht es aber nit, es wird einfach als ein weiteres zeichen dazugeschrieben , das verändert ja dann sozusagen mein passwort ........ es muss irgendwie mit einer schleife gehen das wenn der ascii code für backspace wenn er getätigt wird er ein zeichen auch löscht wenn jemand weis wie es geht kann er dann mal hier den code hinzufügen Zitieren
TDM Geschrieben 5. November 2008 Geschrieben 5. November 2008 ... if (zeichen!=13) { [INDENT] [COLOR="Red"]if (zeichen == 8)[/COLOR] [COLOR="Red"][INDENT]i--;[/INDENT] [/COLOR] [COLOR="Red"]else[/COLOR] [COLOR="Red"]{[/COLOR] [INDENT]eingabe[i]=zeichen; i++;[/INDENT] [COLOR="Red"]}[/COLOR] [/INDENT] } Zitieren
F4KE Geschrieben 5. November 2008 Autor Geschrieben 5. November 2008 hey danke ich habe den code eingebunden und es klappt was noch nicht klappt ist, es werden zwar die zeichen gelöscht aber die sternchen nicht also ich drücke backspace und es kommt ein weiteres sternchen aber das zuletzt eingebene zeichen wurde gelöscht die ausgabe der sterchen geht noch nit auch die sollen weniger werden Zitieren
Wodar Hospur Geschrieben 5. November 2008 Geschrieben 5. November 2008 Dafür musst du die Konsole löschen war früher glaub clrscr(); und dann von vorne mit deinen Daten bemalen. Zitieren
Guybrush Threepwood Geschrieben 5. November 2008 Geschrieben 5. November 2008 Nein es reicht auch einfach nur den letzten Stern zu entfernen bzw mit einem Leerzeichen zu überschreiben. Zitieren
TDM Geschrieben 6. November 2008 Geschrieben 6. November 2008 ... if (zeichen!=13) { [INDENT] [COLOR="Red"]if (zeichen == 8)[/COLOR] [COLOR="Red"]{[/COLOR] [COLOR="Red"][INDENT]i--;[/COLOR] [COLOR="Blue"]cout << '\b' << " " << '\b';[/COLOR][/INDENT] [COLOR="Red"]}[/COLOR] [COLOR="Red"]else[/COLOR] [COLOR="Red"]{[/COLOR] [INDENT]eingabe[i]=zeichen; i++;[/INDENT] [COLOR="Red"]}[/COLOR] [/INDENT] } Sollte funktionieren Zitieren
F4KE Geschrieben 6. November 2008 Autor Geschrieben 6. November 2008 ich bedanke mich für die zahlreichen antworten zu dir tdm, wenn ich es so erweitere wie du es in deinem letzten post gezeigt hast, bewirkt das nur dass wenn ich backspace drücke , das nichts passiert anstatt das es als eingabe erkannt wird also ich tippe ein ***** wenn ich jetzt backspace drücke bleiben die 5 sterne so wie sie dort sind ,, ich will ja das es letzte sternchen gelöscht wird und ich mit meiner eingabe fortfahren kann Zitieren
TDM Geschrieben 6. November 2008 Geschrieben 6. November 2008 Ich weiß schon warum ich \b nicht mag. Da wird das Zeichen nur zwischen geschoben... while (zeichen!=13) { zeichen=getch(); if (zeichen!=13) { if (zeichen == 8) { i--; } else { cout<<"*"; eingabe[i]=zeichen; i++; } } } Zitieren
F4KE Geschrieben 6. November 2008 Autor Geschrieben 6. November 2008 also habe deinen neuen code ausprobiert aber es will einfach nicht klappen, jetzt wird wenn ich etwas eingebe ***** , und ich dann backspace drück kein stern gelöscht , aber der inhalt schon sagen wir mal das passwort ist traurig bei der eingabe erscheinen dann ******* (also 7 sternchen), so wenn ich jetzt backspace drücke sind es immer noch 7 sternchen aber der inhalt des letzen sternchens wurde gelöscht , gebe ich erneut ein g ein und entere ich wird das passwort akzeptiert ..... im prinzip leuft es nur fehlt jetzt noch das der inhalt mit dem sterchnen gelöscht wird also nach backspace drücken nur 6 sterchen dort erscheinen ........... Zitieren
Guybrush Threepwood Geschrieben 6. November 2008 Geschrieben 6. November 2008 Du musst wie gesagt das letzte Sternchen mit einem Leerzeichen überschreiben. Also Cursor eins zurück setzten Leerzeichen ausgeben und Cursor wieder eins zurücksetzten. Wie du den Cursor umsetzt kommt allerdings darauf an womit du programmierst und für welches Betriebssystem. Zitieren
TDM Geschrieben 7. November 2008 Geschrieben 7. November 2008 Ach, ich depp habs falsch getestet... :floet: Wie du den Cursor umsetzt kommt allerdings darauf an womit du programmierst und für welches Betriebssystem. Nein, '\b' ist ein Zeichen zurück, wenn man dann allerdings ein leerzeichen ausgibt, wird der stern um eins nach rechts geschoben und das Leerzeichen steht davor. Zitieren
F4KE Geschrieben 11. November 2008 Autor Geschrieben 11. November 2008 mein code sieht nur so aus, aber sobald ich backspace drücke wird kein sternchen gelöscht,aber der inhalt davon .. irgendwie komisch das doofe ist halt, ich dürkc backspace aber es sind imm noch bsp. 5 sterne dorgt obwohl es 4 sein müssten, trotzdessen kann ich erneut den 5 ten buchstaben eingeben da der inhalt gelöscht wurde //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include<iostream.h> #include<conio.h> #include<string.h> //--------------------------------------------------------------------------- #pragma argsused int main(int argc, char* argv[]) { // Variablendekleration char passwort[20]="levent",eingabe[20]="",zeichen,gefunden='n'; int i=0, versuch=0; // Eingabe do { versuch++; cout<<"\nBitte Passwort eingeben "<<versuch<<". Versuch "; while (zeichen!=13) { zeichen=getch(); if (zeichen!=13) { if (zeichen == 8) { i--; } else { cout<<"*"; eingabe[i]=zeichen; i++; } } } if (strcmp(eingabe,passwort)==0) gefunden='j'; else { cout<<"\nPasswort nicht richtig"; zeichen='\0'; for (i=0; i <=19; i++) eingabe[i]=zeichen; zeichen=' '; i=0; cout<<"\n Bitte eine Taste druecken "; getch(); } } while (versuch<3 && gefunden=='n'); if (gefunden=='j') cout<<"\nSie haben Zugang zum System "; else cout<<"\nSie haben keinen Zugang zum System "; getch(); getch (); return 0; } //--------------------------------------------------------------------------- Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.