ungetc, ungetwc
Reinserisce un carattere nel flusso.
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
Se eseguita correttamente, ognuna di queste funzioni restituisce l'argomento c*.* Se c non può essere reinserito oppure se non è stato letto nessun carattere, il flusso di input è invariato e ungetc restituisce EOF; ungetwc restituisce WEOF. Se stream è NULL, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, EOF o WEOF viene ritornato e errno è impostato su EINVAL.
Per ulteriori informazioni su questi, e altri, codici di errore vedere _doserrno, errno, _sys_errlist, and _sys_nerr .
Note
La funzione ungetc respinge il carattere c in stream e rimuove l'indicatore di fine file. Il flusso deve essere aperto per essere letto. Un'operazione di lettura passa a stream inizia con c*.* Un tentativo di inserire EOF nel flusso utilizzando ungetc viene ignorato.
I caratteri inseriti nel flusso da ungetc possono essere eliminati se fflush, fseek, fsetpos, o viene chiamato rewind prima che il carattere venga letto dal flusso. L'indicatore della posizione avrà il valore che aveva prima che i caratteri siano spinti indietro. L'archiviazione esterna che corrisponde al flusso resterà invariata. In una chiamata corretta ungetc in un flusso di testo, l'indicatore di posizione non è specificato fino a quando tutti i caratteri spinti indietro vengono letti o ignorati. In ogni chiamata corretta ungetc in un flusso binario, l'indicatore di posizione è decrementato; se il valore è 0 prima di una chiamata, il valore non è definito dopo la chiamata.
I risultati sono imprevedibili se ungetc viene chiamato due volte oppure se l'operazione della funzione di posizionamento è tra due chiamate. Dopo che una chiamata a fscanf, una chiamata a ungetc può avere esito negativo a meno che un'altra operazione di lettura (ad esempio getc) sia stata eseguita. Poiché la stessa fscanf chiama ungetc.
ungetwc è una versione a caratteri di tipo "wide" di ungetc. Tuttavia, in ogni chiamata corretta ungetwc su un flusso di testo o binario, il valore dell'indicatore di posizione del file non è specificato fino a quando tutti i caratteri spinti in dietro vengono letti o ignorati.
Queste funzioni sono dati riservati del blocco e thread-safe durante l'esecuzione. Per una versione non bloccante, vedere _ungetc_nolock, _ungetwc_nolock.
Mapping di routine su testo generico
Routine TCHAR.H |
_UNICODE & _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_ungettc |
ungetc |
ungetc |
ungetwc |
Requisiti
Routine |
Intestazione obbligatoria |
---|---|
ungetc |
<stdio.h> |
ungetwc |
<stdio.h> o <wchar.h> |
La console non è supportata nelle applicazioni Windows Store. Gli handle del flusso standard associati alla console,stdin, stdout e stderr, devono essere reindirizzati prima di poter utilizzare le funzioni di runtime del linguaggio C nelle applicazioni Windows Store. Per ulteriori informazioni sulla compatibilità, vedere 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() );
}
Equivalente .NET Framework
Non applicabile. Per chiamare la funzione standard C, utilizzare PInvoke. Per ulteriori informazioni, vedere Esempi di Invocazione della Piattaforma.