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 c
carattere . 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 EOF
WEOF
. 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_errlist
e _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 fscanf
ungetc
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
, stdout
e stderr
devono 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'