Guten Morgen Liste,
vielleicht ist ja der ein oder andere Leser unter
Euch der ebenso wie ich feststellen musste, dass
die Funktion fflush unter Linux nur bedingt seine
Dienste verrrichtet.
Was ich bisher darueber weis:
- K&R, zweite Ausgabe "..bei einem Eingabestrom
ist der Effekt undefiniert(...)
- man kann sich mit Makros oder Funktionen helfen..zB
#define FLUSH( int_keyboard_buffer ) while(( int_keyboard_buffer =
getchar()) != '\n')
- das es auf den Systemen einen Unterschied zwischen binaer
und Textdaten gibt
was ich nicht weis:
- wieso funktionierts auf DOS-Boxen trotz der K&R Aussage
- wie eine saubere Implenmentierung in einer Linux-Umgebung
aussehen koennte
Ich habe mich auf meiner SuSE 8.2 umgebung umgesehen und
eine (nicht portable ?) loesung gefunden. Hier der Code
mit einem Beispielaufruf:
#include
Hi, On Tue, 1 Jul 2003, Oli Weiss wrote:
vielleicht ist ja der ein oder andere Leser unter Euch der ebenso wie ich feststellen musste, dass die Funktion fflush unter Linux nur bedingt seine Dienste verrrichtet.
fflush auf input ist undefiniert und unsinnig (um die Unsinnigkeit zu sehen, ueberlege man sich, was passiert, wenn stdin mit einer Datei verbunden ist). Was genau willst du denn tun? Es sieht so aus, als ob du, bevor eine neue Eingabe gefordert wird erstmal den Input-Puffer leermachen willst (wahrscheinlich um den Nutzer zu zwingen, wirklich die Nachricht zu lesen, bevor er was tippt?). Wenn es das ist, dann willst du dich mit terminals beschaeftigen, nicht einfach mit Standardeingabe.
- wieso funktionierts auf DOS-Boxen trotz der K&R Aussage
'verhalten undefiniert' beinhaltet _alles_, auch "es geht".
- wie eine saubere Implenmentierung in einer Linux-Umgebung aussehen koennte
man ncurses, man getch
{ while( read->_IO_read_ptr != read->_IO_read_end ) getc(stream);
Uhahh. Das vergisst du jetzt wieder ganz schnell, gell? ;-) Ciao, Micha.
participants (2)
-
Michael Matz
-
Oli Weiss