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.

Retornar valor

Se for bem-sucedida, cada uma dessas funções retornará o argumento cde caractere . Se c não puder ser empurrado para trás ou se nenhum caractere tiver sido lido, o fluxo de entrada será inalterado e ungetc retornará EOF; ungetwcWEOFretorna . Se stream for NULL, o manipulador de parâmetros inválido será invocado, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar EOF ou WEOF for retornada, e errno estiver 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 em stream começa 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 , uma chamada para ungetcfscanfpode 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, consulte Estado global na 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