ungetc()
ist in der stdio
definiert, die in C über stdio.h
, bzw in C++ über cstdio
eingebunden wird.
ungetc()
fügt ein Zeichen vor einen Eingabestream. Das bedeutet, dass eine Lesefunktion, wie fgetc()
, als nächstes Zeichen das Zeichen einliest, das mit ungetc()
dem Inputstream vorangestellt wurde.
Ziel ist, ein Zeichen, dass mit fgetc()
gelesen wurde und für einen späteren Teil des Algorithmus erst noch gelesen werden muss. Eine andere Möglichkeit ist, Testeingaben voranzustellen, um ein Programm, das Eingaben erwartet, automatisch zu generieren. Dies wird im Beispiel gezeigt.
#include <stdio.h> int ungetc( int c, FILE * stream );
c: Das voranzustellende Zeichen
stream: Der Eingabestream, dem c
vorangestellt werden soll
Return Value: Bei Erfolg entspricht der Wert c
, ansonsten wird im Fehlerfall EOF zurückgeliefert.
-
Das Beispiel hier entspricht dem Beispiel der Funktion getchar(), lediglich wird die Standardeingabe mit drei Buchstaben gefüllt:
#include <stdlib.h> #include <stdio.h> int main () { int c = 0; ungetc( 'x', stdin ); ungetc( 'a', stdin ); ungetc( 'b', stdin ); while( c != 'x' ) { printf( "Bitte geben Sie einen Buchstaben ein: " ); fflush( stdout ); c = getchar(); printf( "Sie gaben folgenden Buchstaben ein: %c\n", c ); } return EXIT_SUCCESS; }
Ausgabe:
Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: b Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: a Bitte geben Sie einen Buchstaben ein: Sie gaben folgenden Buchstaben ein: x
Auch wenn hier aus der Standardeingabe gelesen wird, muss von der Tastatur keine Eingabe getätigt werden, da die Standardeingabe ja bereits die Zeichen 'bax'. Hier sieht man auch, dass ungetc()
die Buchstaben voranstellt, da das 'x' zwar zuerst mit ungetc()
in den Stream 'gepusht' wurde, aber erst nach 'b' und 'a' gelesen wurde.