fgetc()
ist in der stdio
definiert, die in C über stdio.h
, bzw in C++ über cstdio
eingebunden wird.
fgetc()
liest ein Zeichen vom übergebenen Stream und äquivalent zu getc()
. fgetc()
ist zu bevorzugen, da getc()
als Makro implementiert sein kann.
#include <stdio.h> int fgetc( FILE * file );
file: Ein gültiger Stream, aus dem gelesen werden kann.
Return value: Ein unsigned char
, der als int
zurückgegeben wird oder EOF beim Dateiende.
Folgendes Programm wartet fragt solange nach, bis ein 'x' eingegeben wurde:
#include <stdlib.h> #include <stdio.h> int main () { int c = 0; while( c != 'x' ) { printf( "Bitte geben Sie einen Buchstaben ein: " ); fflush( stdout ); c = fgetc( stdin ); printf( "Sie gaben folgenden Buchstaben ein: %c\n", c ); } return EXIT_SUCCESS; }
Ausgabe:
Bitte geben Sie einen Buchstaben ein: x Sie gaben folgenden Buchstaben ein: x
Hierbei muss nach der Eingabe des Buchstabens die Return-Taste gedrückt werden, damit das Programm auf die Eingabe reagiert.
Aber:
Bitte geben Sie einen Buchstaben ein: a Sie gaben folgenden Buchstaben ein: a Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: Bitte geben Sie einen Buchstaben ein: x Sie gaben folgenden Buchstaben ein: x
Was ist passiert?
Beim der zweiten Eingabe wird 1 Buchstabe aus dem Eingabestream gelesen, der kein 'x' ist. Damit verbleibt das „Return-Zeichen“ im Eingabestream, das notwendig war, damit der Buchstabe überhaupt bemerkt wird.
fgetc()
reagiert also nicht nur auf ein Zeichen:
Bitte geben Sie einen Buchstaben ein: Hallo Sie gaben folgenden Buchstaben ein: H Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: a Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: l Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: l Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: o Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: Bitte geben Sie einen Buchstaben ein: x Sie gaben folgenden Buchstaben ein: x