computercrustie Geschrieben 12. Januar 2005 Geschrieben 12. Januar 2005 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 Zitieren
Phade Geschrieben 12. Januar 2005 Autor Geschrieben 12. Januar 2005 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??? Zitieren
Klotzkopp Geschrieben 12. Januar 2005 Geschrieben 12. Januar 2005 Und nu??? Code zeigen, was sonst? Vermutlich fehlt ein Semikolon oder so was. Zitieren
Phade Geschrieben 12. Januar 2005 Autor Geschrieben 12. Januar 2005 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..... Zitieren
computercrustie Geschrieben 12. Januar 2005 Geschrieben 12. Januar 2005 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 ? Zitieren
Phade Geschrieben 12. Januar 2005 Autor Geschrieben 12. Januar 2005 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; } Zitieren
computercrustie Geschrieben 12. Januar 2005 Geschrieben 12. Januar 2005 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] Zitieren
Phade Geschrieben 13. Januar 2005 Autor Geschrieben 13. Januar 2005 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...??? Zitieren
computercrustie Geschrieben 13. Januar 2005 Geschrieben 13. Januar 2005 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. Zitieren
Phade Geschrieben 13. Januar 2005 Autor Geschrieben 13. Januar 2005 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.... Zitieren
computercrustie Geschrieben 13. Januar 2005 Geschrieben 13. Januar 2005 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. Zitieren
Phade Geschrieben 13. Januar 2005 Autor Geschrieben 13. Januar 2005 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.......... Zitieren
computercrustie Geschrieben 13. Januar 2005 Geschrieben 13. Januar 2005 :confused: Wie jetzt ? Genau das wolltest du doch !? Zitieren
Phade Geschrieben 13. Januar 2005 Autor Geschrieben 13. Januar 2005 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.... Zitieren
computercrustie Geschrieben 13. Januar 2005 Geschrieben 13. Januar 2005 ..., 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] Zitieren
Phade Geschrieben 13. Januar 2005 Autor Geschrieben 13. Januar 2005 Hi, sag mal, der zweite Link funktioniert nicht?!?!? Kann nicht angezeigt werden.... Soll ich den Quelltext in mein Passwortprogramm einfügen???? Zitieren
computercrustie Geschrieben 13. Januar 2005 Geschrieben 13. Januar 2005 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. 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.