ungetc()

ungetc() ist in der stdio definiert, die in C über stdio.h, bzw in C++ über cstdio eingebunden wird.

Funktion

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.

Signatur

#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.

Fehlerquellen

-

Beispiel

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.

siehe auch