Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

hat denn keiner eine idee wie das funktionieren könnte ...

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.

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

...


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]

}

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

...


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

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

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++;


				} 

			}

		}

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

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.

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;


}

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.