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

dann schreiben wir die kbhit() halt selbst:


int kbhit(void)

{

  if(getchar()!=EOF)  //nächstes zeichen aus stdin holen und auf EOF prüfen

  {

     ungetc(stdin);  //Zeichen vorhanden, wieder zurückschreiben

     return 1;         //wahr zurückgeben

  }

  return 0;            //ansonsten falsch

}

Ich hab's nicht ausprobiert, müsste aber funktionieren

Gets haut irgendwas überhaupt nicht mehr hin....:


...:~/C++ Dateien/Passwort> gcc -o Pass pass.cpp

pass.cpp: In function `int main()':

pass.cpp:18: error: syntax error before `{' token

pass.cpp: At global scope:

pass.cpp:25: error: syntax error before `return'

pass.cpp:29: error: `pass_cmp' was not declared in this scope

pass.cpp:29: error: ISO C++ forbids declaration of `strcpy' with no type

pass.cpp:29: error: `int strcpy' redeclared as different kind of symbol

/usr/include/string.h:83: error: previous declaration of `char* strcpy(char*,

   const char*)'

pass.cpp:29: error: initializer list being treated as compound expression

pass.cpp:32: error: ISO C++ forbids declaration of `printf' with no type

pass.cpp:32: error: `int printf' redeclared as different kind of symbol

/usr/include/stdio.h:329: error: previous declaration of `int printf(const

   char*, ...)'

pass.cpp:32: error: invalid conversion from `const char*' to `int'

pass.cpp:34: error: syntax error before `while'

pass.cpp:37: error: ISO C++ forbids declaration of `c' with no type

pass.cpp:39: error: syntax error before `if'

pass.cpp:48: error: `cnt' was not declared in this scope

pass.cpp:48: error: ISO C++ forbids declaration of `pass' with no type

pass.cpp:48: error: assignment (not initialization) in declaration

pass.cpp:49: error: syntax error before `++' token

pass.cpp:53: error: `cnt' was not declared in this scope

pass.cpp:53: error: ISO C++ forbids declaration of `pass' with no type

pass.cpp:53: error: assignment (not initialization) in declaration

pass.cpp:55: error: ISO C++ forbids declaration of `printf' with no type

pass.cpp:55: error: redefinition of `int printf'

pass.cpp:32: error: `int printf' previously defined here

pass.cpp:55: error: invalid conversion from `const char*' to `int'

pass.cpp:57: error: syntax error before `if'

Und nu???

STOP ALLES ZURÜCK !!!!! habe ein ; vergessen ...sorry....

bekomme jetzt nur noch :

...:~/C++ Dateien/Passwort> gcc -o Pass pass.cpp

pass.cpp: In function `int main()':

pass.cpp:21: error: invalid conversion from `_IO_FILE*' to `int'

/usr/include/stdio.h:598: error: too few arguments to function `int ungetc(int,

FILE*)'

pass.cpp:21: error: at this point in file

Muss ich die GRöße des Passwortes ändern?? oder meint er andere arguments???

Das ist doch mal was.....

Ich habe das jetzt mal ausprobiert und noch etwas ganz anderes festgestellt, das könnte aber Betriebssystem abhängig sein.

Was passiert auf dem Bildschirm wenn du getchar() benutzt ? Erscheinen bei der Passworteingabe Sternchen ("*") oder die Buchstaben die du eingegeben hast ?

Weder noch, ich bekomme es gar nicht erst Compiliert. Ich benutze nur getchar().

Quelltext:

#include <stdio.h> // Einbinden der

#include <string.h> // benötigten Bibliotheken

/*

ACHTUNG DIE conio.h FUNKTIONIERT NICHT UNTER LINUX !!!!!!!!!!!ACHTUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

*/

#define MAXZEICHEN 10 // maximale Anzahl an Zeichen im Passwort festlegen

main()

{

char c = 0;

char pass[MAXZEICHEN];

char pass_cmp[MAXZEICHEN]; // Variable für das Vergleichspasswort deklarieren

int cnt = 0;

int kbhit(void); // kbhit selber schreiben

{

if(getchar()!=EOF) //nächstes zeichen aus stdin holen und auf EOF prüfen

{

ungetc(stdin); //Zeichen vorhanden, wieder zurückschreiben

return 1; //wahr zurückgeben

}

else

{

return 0; //ansonsten falsch

}

}

strcpy(pass_cmp,"passwort"); // "passwort" nach pass_cmp kopieren

printf("Bitte geben Sie Ihr Passwort ein: ");

while( 1==1 ) // Endlosschleife

{

while(!kbhit()); // warte auf Tastendruck

c = getchar(); // schreibt eingabe nach c

if (c==13)

{

break;

}

if (cnt<MAXZEICHEN)

{

printf("*"); // Sternchen ausgeben

pass[cnt] = c; // Zeichen merken

cnt++; // Zähler erhöhen

}

}

pass[cnt] = '\0';

printf("\n\nDas eingegebene Passwort ist ");

if ( 0 == strcmp(pass,pass_cmp) ) // pass mit pass_cmp vergleichen

{

printf("\n\nRichtig 1");

}

else

{

printf("\n\nFalsch 0");

}

while(!kbhit()); // warte auf Tastendruck

return 0;

}

Ich hab was gefunden, ist aber zu lang zum posten.

Die beiden Artikel beschrieben die Simulation der getch() und kbhit() Befehle unter Linux:

http://www.ohse.de/uwe/articles/getch.html

http:://www.ohse.de/uwe/articles/kbhit.html

Oder du versuchst mal folgende Variante:

http://www.pwilson.net/kbhit.html

[EDIT]

Oder probier mal das Beispiel, ist etwas kürzer:

http://www.flipcode.org/cgi-bin/fcarticles.cgi?show=64166

[/EDIT]

Hallöchen zusammen,

ich habe das Programm nun, wie unten zu sehen, umgesetzt. Ich bekomme es auch Compiliert und kann es auch ausführen. Das nun noch vorhandene Problem ist, das ich das Passwort noch angezeigt bekomme und nicht wie eigentlich gewollt nur die Sternchen..... Ich brauche doch bloß nur einen Eintrag im Quelltext tauschen oder ???

#include <stdio.h> // Einbinden der 

#include <string.h> // benötigten Bibliotheken


/*

ACHTUNG DIE conio.h FUNKTIONIERT NICHT UNTER LINUX !!!!!!!!!!!ACHTUNG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

*/


#define MAXZEICHEN 10 // maximale Anzahl an Zeichen im Passwort festlegen


    char c = 0;

    char pass[MAXZEICHEN];

    char pass_cmp[MAXZEICHEN]; // Variable für das Vergleichspasswort deklarieren

    int cnt = 0;


    int kbhit(void) // kbhit selber schreiben

    {

	if(getchar()!=EOF) //nächstes zeichen aus stdin holen und auf EOF prüfen

	{

	    // ungetc(stdin); //Zeichen vorhanden, wieder zurückschreiben

	    return 1; //wahr zurückgeben

	}


	else

	{

	    return 0; //ansonsten falsch

	}

    }


main()

{



    printf("Bitte geben Sie Ihr Passwort ein: ");


    while( 1==1 ) // Endlosschleife

    {

	while(!kbhit()); // warte auf Tastendruck

	c = getchar(); // schreibt eingabe nach c


	if (c==13)

	{

	    break;

	}


	if (cnt<MAXZEICHEN)

	{

	    printf("*"); // Sternchen ausgeben


	    pass[cnt] = c; // Zeichen merken

	    cnt++; // Zähler erhöhen

	}

    }


    strcpy(pass_cmp,"passwort"); // "passwort" nach pass_cmp kopieren

    pass[cnt] = '\0';


    printf("\n\nDas eingegebene Passwort ist ");


    if ( 0 == strcmp(pass,pass_cmp) ) // pass mit pass_cmp vergleichen

    {

	printf("\n\nRichtig 1");

    }


    else

    {

	printf("\n\nFalsch 0");

    }


    while(!kbhit()); // warte auf Tastendruck


    return 0;


}

Ich sage aber trotzdem Thanx für eure bisherigen Bemühungen und hoffe, dass ich euch nicht zu sehr strapaziert habe...???

So trivial ist das Problem leider nicht, deshalb wurde unter DOS auch getch() implementiert, da es im Gegensatz zum ANSI-C Befehl getchar() die Zeichen aus stdin nicht "echot", also auf dem Bildschirm ausgibt. Und genau das ist auch dein Problem. Du musst dir den getch()-Befehl UND den kbhit()-Befehl aus einem der Beispiele aus den obigen Links "nachbauen" und diesen dann benutzen.

An dieser Stelle kann ich dir so nicht weiterhelfen, da ich nur Windows laufen habe und so diese Unix-spezifischen Dinge nicht nachvollziehen kann.

Ahhhhh ha, na dann ist gut. Werde mal sehen wie ich das einbauen kann. Es läuft aber so auf nem Windowswürfel?? Wir haben in der Schule XP und Programmieren mit Borland x.x. Dürft ja wohl funktionieren....

Der erste Code, den ich gepostet habe läuft so auf jeden Fall auf einem "Windowswürfel" und müsste sich (mit Weglassen der Unterstriche vor _getch() und _kbhit()) auch ohne Probleme mit dem Builder bauen lassen.

Ja, werde mal sehen wie ich das lösen werden, aber momentan fukell ich daran, das mir bei der Passworteingabe Sternchen und nicht das Passwort angezeigt wird. Da hänge ich zur Zeit..........

:confused:

Wie jetzt ? Genau das wolltest du doch !?

Moment, kann sein das ich es nicht richtig erklärt habe.

Also, wenn der Satz kammt "bitte Passwort eingeben:" soll bei der Passworteingabe Sternchen angezeigt werden und nicht das Passwort. Dann soll das Passw. überprüft werden und wenn es dann Richtig ist soll eine 1 für richtig ausgegeben werden und wenn es falsch ist eine 0. Quasie wie bei einer Passworteingabe bei der Administratoranmeldung unter Windows....

..., aber momentan fukell ich daran, das mir bei der Passworteingabe Sternchen und nicht das Passwort angezeigt wird. .....

Dann hast du dich sicherlich verschrieben.

Wie gesagt, implementiere die Beispiele aus den Links die ich gepostet habe, da getchar() jeden Tastendruck zwar im STDIN stream ablegt, ihn aber auch gleichzeitig auf dem Bildschirm ausgibt.

[EDIT]

ICH habe mich verlesen, der Satz war nicht ganz eindeutig. Hätte auch sein können, dass du versuchst, anstatt der Sternchen das Passwort angezeigt zu bekommen.

Sorry :floet:

[/EDIT]

Hi, sag mal, der zweite Link funktioniert nicht?!?!? Kann nicht angezeigt werden.... Soll ich den Quelltext in mein Passwortprogramm einfügen????

Hab mich vertippt, so muss es aussehen:

http://www.ohse.de/uwe/articles/kbhit.html

Das mit dem kopieren kannst du versuchen, aber ich glaube nicht, dass das so einfach klappt. Wenn ja, dann gut. Wenn nicht, dann musst du versuchen, die fehlenden Header zu bekommen, aber wie gesagt, habe kein Unix-System und kann dir da nicht weiterhelfen.

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.