Zum Inhalt springen

Rückwärtsschleife


F4KE

Empfohlene Beiträge

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 ......

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

...


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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ...........

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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;


}

//---------------------------------------------------------------------------

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...