ungetc, ungetwc

Envia um caractere de volta para o fluxo.

Sintaxe

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

Parâmetros

c
O caractere a ser enviado.

stream
Ponteiro para a estrutura FILE.

Valor retornado

Se tiver sucesso, cada uma dessas funções retornará o argumento do caractere c. Se não for possível efetuar push de c ou se nenhum caractere for lido, o fluxo de entrada não será alterado e ungetc retornará EOF; ungetwc retornará WEOF. Se stream for NULL, o manipulador de parâmetro inválido será chamado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar EOF ou WEOF for retornada e errno for definida como EINVAL.

Para obter informações sobre esses e outros códigos de erro, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Comentários

A função ungetc envia o caractere c de volta para stream e limpa o indicador de final do arquivo. O fluxo deve estar aberto para leitura. Uma operação de leitura subsequente começa stream com c. Uma tentativa de envio EOF para o fluxo usando ungetc será ignorada.

Caracteres colocados no fluxo por ungetc podem ser apagados se fflush, fseek, fsetpos ou rewind é chamado antes que o caractere é lido do fluxo. O indicador de posição do arquivo terá o valor que tinha antes que os caracteres foram enviados de volta. O armazenamento externo correspondente para o fluxo não é alterado. Em uma chamada de ungetc bem-sucedida em um fluxo de texto, o indicador de posição do arquivo não é especificado até que todos os caracteres de retorno enviado sejam lidos ou descartados. Em cada chamada de ungetc bem-sucedida em um fluxo binário, o indicador de posição do arquivo será reduzido; se o valor for 0 antes de uma chamada, o valor será indefinido após a chamada.

Resultados serão imprevisíveis se ungetc for chamado duas vezes sem uma operação de leitura ou posicionamento de arquivo entre as duas chamadas. Após uma chamada para fscanf, uma chamada para ungetc pode falhar, a menos que outra operação de leitura (como getc) tenha sido executada, porque fscanf ela mesma chama ungetc.

ungetwc é uma versão de caractere largo de ungetc. No entanto, em cada chamada de ungetwc bem-sucedida em um fluxo de texto ou binário, o valor do indicador de posição do arquivo não é especificado até que todos os caracteres de retorno enviado sejam lidos ou descartados.

Essas funções são thread-safe e bloqueiam dados confidenciais durante a execução. Para uma versão sem bloqueio, confira _ungetc_nolock, _ungetwc_nolock.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Mapeamentos de rotina de texto genérico

Rotina TCHAR.H _UNICODE e _MBCS não definidos _MBCS definido _UNICODE definido
_ungettc ungetc ungetc ungetwc

Requisitos

Rotina Cabeçalho necessário
ungetc <stdio.h>
ungetwc <stdio.h> ou <wchar.h>

Não há suporte para o console em aplicativos UWP (Plataforma Universal do Windows). Os identificadores de fluxo padrão associados ao console, stdin, stdout e stderr, devem ser redirecionados antes que as funções em tempo de execução C possam usá-los em aplicativos UWP. Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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'

Confira também

E/S de fluxo
getc, getwc
putc, putwc