tastaturpuffer löschen mit C

Gast #703147
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
Gast #703184
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...
#703204
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.
Gast #703242
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
#703244
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.