ungetc, ungetwc

Vuelve a insertar un carácter en el flujo.

Sintaxis

int ungetc(
   int c,
   FILE *stream
);
wint_t ungetwc(
   wint_t c,
   FILE *stream
);

Parámetros

c
Carácter que se va a devolver.

stream
Puntero a la estructura FILE .

Valor devuelto

Si se ejecuta correctamente, cada una de estas funciones devuelve el argumento de ccarácter . Si c no se puede devolver o si no se ha leído ningún carácter, el flujo de entrada no se modifica y ungetc devuelve ; ungetwc devuelve EOFWEOF. Si stream es NULL, se invoca el controlador de parámetros no válidos, como se describe en Validación de parámetros. Si la ejecución puede continuar o EOFWEOF se devuelve y errno se establece en EINVAL.

Para información sobre estos y otros códigos de error, consulte errno, _doserrno_sys_errlist y _sys_nerr.

Comentarios

La función ungetc vuelve a insertar el carácter c en stream y borra el indicador de fin de archivo. El flujo debe estar abierto para lectura. Una operación de lectura posterior en stream comienza con c. Los intentos de insertar EOF en el flujo mediante ungetc se omiten.

Los caracteres que ungetc pone en el flujo se podrían borrar si se llama a fflush, fseek, fsetpos o rewind antes de que se lea el carácter del flujo. El indicador de posición de archivo tendrá el valor que tenía antes de que se volvieran a insertar los caracteres. El almacenamiento externo correspondiente al flujo no cambia. Si una llamada de ungetc en un flujo de texto se realiza correctamente, el indicador de posición del archivo está sin especificar hasta que se leen o se descarten todos los caracteres que se han vuelto a insertar. En cada llamada correcta de ungetc en un flujo binario se reduce el indicador de posición de archivo. Si el valor era 0 antes de una llamada, el valor queda sin definir después de la llamada.

Los resultados son imprevisibles si se llama a ungetc dos veces sin que haya una operación de lectura o de posición de archivo entre las dos llamadas. Después de una llamada a fscanf, se puede producir un error en una llamada a a ungetc menos que se haya realizado otra operación de lectura (por getcejemplo, ), ya que fscanf a sí misma llama a ungetc.

ungetwc es una versión con caracteres anchos de ungetc. Sin embargo, en cada llamada correcta de ungetwc en un flujo de texto o binario, el valor del indicador de posición de archivo no se especifica hasta que se leen o se descartan todos los caracteres que se han vuelto a insertar.

Estas funciones son seguras para subprocesos y bloquean los datos confidenciales durante la ejecución. Para consultar una versión que no sea de bloqueo, vea _ungetc_nolock, _ungetwc_nolock.

De manera predeterminada, el estado global de esta función está limitado a la aplicación. Para cambiar este comportamiento, consulte Estado global en CRT.

Asignaciones de rutinas de texto genérico

Rutina TCHAR.H _UNICODE y _MBCS no definidos _MBCS definido _UNICODE definido
_ungettc ungetc ungetc ungetwc

Requisitos

Routine Encabezado necesario
ungetc <stdio.h>
ungetwc <stdio.h> o <wchar.h>

La consola no se admite en las aplicaciones de la Plataforma universal de Windows (UWP). Los identificadores de flujo estándar asociados a la consola, stdin, stdout y stderr, se deben redirigir antes de que las funciones en tiempo de ejecución de C puedan usarlos en aplicaciones para UWP. Para obtener más información sobre compatibilidad, consulte Compatibilidad.

Ejemplo

// crt_ungetc.c
// This program first converts a character
// representation of an unsigned integer to an integer. If
// the program encounters a character that is not a digit,
// the program uses ungetc to replace it in the  stream.
//

#include <stdio.h>
#include <ctype.h>

int main( void )
{
   int ch;
   int result = 0;

   // Read in and convert number:
   while( ((ch = getchar()) != EOF) && isdigit( ch ) )
      result = result * 10 + ch - '0';    // Use digit.
   if( ch != EOF )
      ungetc( ch, stdin );                // Put nondigit back.
   printf( "Number = %d\nNext character in stream = '%c'",
            result, getchar() );
}

      521aNumber = 521
Next character in stream = 'a'

Consulte también

E/S de secuencia
getc, getwc
putc, putwc