12. Januar 200520 j 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
12. Januar 200520 j 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???
12. Januar 200520 j 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.....
12. Januar 200520 j 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 ?
12. Januar 200520 j 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; }
12. Januar 200520 j 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]
13. Januar 200520 j 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...???
13. Januar 200520 j 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.
13. Januar 200520 j 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....
13. Januar 200520 j 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.
13. Januar 200520 j 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..........
13. Januar 200520 j 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....
13. Januar 200520 j ..., 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]
13. Januar 200520 j Hi, sag mal, der zweite Link funktioniert nicht?!?!? Kann nicht angezeigt werden.... Soll ich den Quelltext in mein Passwortprogramm einfügen????
13. Januar 200520 j 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.