ungetc, ungetwc

Reinserisce un carattere nel flusso.

Sintassi

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

Parametri

c
Carattere da inserire.

stream
Puntatore alla struttura FILE .

Valore restituito

In caso di esito positivo, ognuna di queste funzioni restituisce l'argomento ccarattere . Se c non è possibile eseguire il push indietro o se non è stato letto alcun carattere, il flusso di input rimane invariato e ungetc restituisce . ungetwc Restituisce EOFWEOF. Se stream è NULL, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare EOF o WEOF viene restituita e errno viene impostata su EINVAL.

Per informazioni su questi e altri codici di errore, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

La funzione ungetc reinserisce il carattere c in stream e cancella l'indicatore di fine del file. Il flusso deve essere aperto per la lettura. Un'operazione di lettura successiva su stream inizia con c. Un tentativo di inserire EOF nel flusso tramite ungetc viene ignorato.

I caratteri inseriti nel flusso da ungetc possono essere cancellati se viene chiamata la funzione fflush, fseek, fsetpos o rewind prima che il carattere venga letto dal flusso. L'indicatore di posizione del file avrà il valore esistente prima del reinserimento dei caratteri. Lo spazio di archiviazione esterno corrispondente al flusso rimane invariato. In caso di una chiamata a ungetc con esito positivo su un flusso di testo, l'indicatore di posizione del file non è specificato fino a quando non vengono letti o rimossi tutti i caratteri reinseriti. Per ogni chiamata ungetc con esito positivo successiva su un flusso binario, l'indicatore di posizione del file viene decrementato. Se il valore è 0 prima della chiamata, il valore è indefinito dopo la chiamata.

I risultati sono imprevedibili se la funzione ungetc viene chiamata due volte senza un'operazione di lettura o posizionamento di file tra le due chiamate. Dopo una chiamata a , una chiamata a fscanfungetc potrebbe non riuscire a meno che non sia stata eseguita un'altra operazione di lettura , ad esempio getc, perché fscanf chiama .ungetc

ungetwc è una versione a caratteri wide di ungetc. Per ogni chiamata a ungetwc con esito positivo successiva su un flusso di testo o binario, tuttavia, l'indicatore di posizione del file non è specificato fino a quando non vengono letti o rimossi tutti i caratteri reinseriti.

Queste funzioni sono thread-safe e bloccano i dati sensibili durante l'esecuzione. Per una versione non di blocco, vedere _ungetc_nolock, _ungetwc_nolock.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Mapping di routine di testo generico

Routine TCHAR.H _UNICODE e _MBCS non definito _MBCS Definito _UNICODE Definito
_ungettc ungetc ungetc ungetwc

Requisiti

Ciclo Intestazione obbligatoria
ungetc <stdio.h>
ungetwc <stdio.h> o <wchar.h>

La console non è supportata nelle app piattaforma UWP (Universal Windows Platform) (UWP). Gli handle di flusso standard associati alla console, stdin, stdoute stderrdevono essere reindirizzati prima che le funzioni di runtime C possano usarle nelle app UWP. Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).

Esempio

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

Vedi anche

I/O di flusso
getc, getwc
putc, putwc