C / stdio.h / ungetc
clearerr, fclose, feof, ferror, fflush, fgetc, fgetpos, fgets, fopen, fprintf, fputc, fputs, fread, freopen, fscanf, fseek, fsetpos, ftell, fwrite, getc, getcha, gets, perror, printf, putc, putchar, puts, remove, rename, rewind, scanf, setbuf, setvbuf, sprintf, sscanf, tmpfile, tmpnam, » ungetc, vfprintf, vprintf, vsprintf,
Funcion: ungetc()
Sintaxis:
int ungetc(char c, FILE *stream);

Descripcion: Esta función envía el carácter especificado por c (convertido a un unsigned char) en el stream de entrada apuntado por stream. Los caracteres apilados serán retornados por lecturas posteriores en ese stream en orden inverso al que fueron apilados. Una llamada interventiva y correcta (con el stream apuntado por stream) a una función de posicionamiento de fichero (fseek, fsetpos, o rewind) descarta cualquier carácter apilado para el stream. El almacenamiento externo correspondiente al stream no varía.

Un carácter apilado es garantizado. Si la función ungetc es llamada demasiadas veces al mismo stream sin una lectura interventiva o una operación de posicionamiento de fichero en ese stream, entonces la operación falla. Si el valor de c es igual a la macro EOF, la operación falla y el stream de entrada no varía.

Una llamada exitosa a la función ungetc despeja el indicador de final de fichero para el stream. El valor del indicador de posición de ficheros para el stream después de leer o descartar todos los caracteres apilados será el mismo que era antes de que los caracteres fueran apilados. Para un stream de texto, el valor de su indicador de posición de ficheros después de una llamada exitosa a la función ungetc no es especificado hasta que todos los caracteres apilados sean leídos o descartados. Para un stream binario, el valor de su indicador de posición de ficheros es determinado por cada llamada exitosa a la función ungetc; si su valor era cero antes de la llamada, es indeterminado después de la llamada.

Ejemplo:
#include <stdio.h>
#include <ctype.h>
 
int main( void )
{
   int i=0;
   char c;
 
   puts( "Escriba un numero entero seguido por un caracter:" );
 
   /* lee caracteres hasta uno que no sea un d&iacute;gito o hasta un EOF */
   while( (c=getchar()) != EOF && isdigit(c) )
      i = 10 * i + c - 48;    /* convierte ASCII un valor entero (int) */
 
   /* Si se ley&oacute; un car&aacute;cter que no era un d&iacute;gito, ap&iacute;lalo en el stream de entrada */
   if( c != EOF )
      ungetc( c, stdin );
 
   printf( "i = %d, siguiente caracter en el stream = %c\n", i, getchar() );
 
   return 0;
}

Librerias C

Librerias ANSI C
   string.hcstring
   math.hcmath
   stdio.hcstdio
   time.hctime
   stdlib.hcstdlib
   ctype.hcctype
   locale.hclocale
   signal.hcsignal
   setjmp.hcsetjmp

Librerias Borland
   conio.h
   graphics.h