16.13 (Tastatur-)Puffer leeren – »fflush()« 

Diese Funktion dürfte Ihnen aus Abschnitt 4.1, »Formatierte Eingabe mit scanf()«, bekannt vorkommen, als es darum ging, ein im Tastaturpuffer befindliches Zeichen wie '\n' (Newline-Zeichen) zu entfernen. Die Syntax von fflush():
#include <stdio.h> int fflush(FILE *datei);
Mit fflush() werden alle Inhalte von einem noch nicht geleerten Puffer eines Streams übertragen, die dem FILE-Zeiger datei zugeordnet sind (oder auch Standard-Streams). Das heißt kurz und bündig, die dem Stream zugeordneten Puffer werden geleert. Falls die Datei zum Schreiben geöffnet ist, werden die sich noch im Puffer befindlichen Zeichen physikalisch in die Datei geschrieben. War eine Datei zum Lesen geöffnet, werden die noch nicht gelesenen Zeichen im Eingabepuffer gelöscht. fflush() gibt bei Erfolg 0 zurück, andernfalls EOF.
Es scheint aber nicht ganz klar, ob dies auch für Linux gültig ist. Auf Linux-Systemen will fflush() partout nicht funktionieren. Nehmen Sie etwa folgendes Programm:
/* fflush.c */ #include <stdio.h> #include <stdlib.h> int main(void) { char x,y; printf("Bitte einen Buchstaben eingeben : "); scanf("%c",&x); fflush(stdin); printf("Bitte noch einen Buchstaben eingeben : "); scanf("%c",&y); printf("Sie gaben ein %c und %c \n",x,y); return EXIT_SUCCESS; }
Sie können das Programm so verbiegen und verdrehen, wie Sie wollen, immer wird die zweite Ausgabe durch das sich im Puffer befindliche '\n'-Zeichen überdruckt.
Das Argument von fflush() kann auch NULL sein. Ist dies der Fall, entleert fflush() die Ausgabepuffer aller Streams des Programms. Bei ungepuffertem Datenverkehr hat fflush() keine Wirkung.
Der ANSI-C-Standard schreibt aber auch nicht vor, wie die Funktion fflush() auf den Stream stdin zu reagieren hat. Das Verhalten ist somit nicht definiert und kann funktionieren oder auch nicht.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.