Hallo zusammen. kleine frage: Eine while schleife wird beendet durch drücken einer beliebigen taste. ich frage dazu in der schleife den Tastaurpuffer ab mit dem befehl: kbhit(); ab. wenn nun das Programm ein zweites mal in diese Schleife kommt wird sie sofort beendet ohne dass eine Taste gedrückt wurde. also steht doch da noch was im tastaturpuffer? und kbhit() bleibt irgendwie "true" ich versuchte mit fflush (stdin) den Puffer zu löschen geht dan aber trotzdem nicht. was mache ich falsch??? while (!kbhit()){ for (sekunde = 0; sekunde < 34000; sekunde = sekunde +1) { printf("."); printf("\b"); } printf("\b\b\b\b\b\b"); Brenndauer = Brenndauer + 1; printf("sek %i",Brenndauer); } danke für eure Hilfe Grüsse Raphael
mit getch habe ich auch schon rum gepröbelt, aber ohne erfolg...:-(
Gleich der erste Google Eintrag zum Suchbegriff "kbhit" liefert http://www.c-plusplus.de/forum/viewtopic-var-p-is-284396.html
auf diese seite bin ich auch schon gestossen, aber hilft ja nicht weil mit getch nichts geht.... habe noch folgendes bei google entdekt: //int c; // int c, nicht char c. //while ((c = getchar()) != EOF && c != '\n'); // kein {} block, stimmt so das geht, aber erfordert eine bestätigung sonst bleibt er hängen. sollte eben auch ohne bestätigung gehen...
Das Problem ist, dass es hier 2 Welten gibt: Die eine ist die Standard - C Welt. In dieser Welt gibt es schlicht und ergreifend keine Tastatur. Es gibt einen Eingabestrom, wo der herkommt ist für C erst mal uninteressant. Und nein: man kann ihn nicht flushen Unud dann gibt es noch die Nicht-Standard-C Welt. In der gibt es eine Tastatur. Nur: Jeder Compiler Hersteller kocht da sein eigenes Süppchen. Oft funktionieren die Dinge zwar ähnlich, unterscheiden sich aber trotzdem im Detail. Du wirst also etwas experimentieren müssen. Dein Konstrukt müsste dem Prinzip nach in etwas so aussehen
1 | while( !kbhit() ) { // solange keine Taste gedrückt |
2 | ...
|
3 | }
|
4 | |
5 | char c = getch(); // nimm den Tastendruck der zum Schleifen- |
6 | // abbruch geführt hat, aus dem Input Stream
|
Das Prinzip ist also nicht vor dem kbhit() den input buffer zu leeren, sondern nach einem kbhit() das Zeichen zu entfernen.
Da fällt mir aber noch was ein. Du müsstest mit
1 | char c; |
2 | |
3 | while( kbhit() { |
4 | c = getch(); |
5 | }
|
aber eigentlich ohne Probleme den Input Buffer leeren können.
get che; ist das zauberwörtchen... obwohl nach beschreibung getch das selbe macht, das eine geht das andere nicht.... hauptsache es geht danke fpr die Hilfe Grüsse Raphael
Der feine Unterschied zwischen getchar() und getch() ist folgender: getchar() arbeitet auf stdin, das normalerweise gepuffert ist, aber auch in den ungepufferten Modus umgeschaltet werden kann. Header: stdio.h getch() und kbhit() arbeiten direkt auf dem Tastatupuffer, der nur 1 Zeichen fassen kann. Header: conio.h Die Implementierung von stdin greift auf conio zurück, conio ist also die primitivere Schicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.