La funzione ungetwc () in C ++ rimanda il carattere wide precedentemente letto nello stream in modo che possa essere letto di nuovo.
La funzione ungetwc () è definita nel file di intestazione.
prototipo ungetwc ()
wint_t ungetwc (wint_t ch, FILE * stream);
La funzione ungetwc () rimanda il carattere largo ch al buffer associato al flusso di file a meno che ch non sia uguale a WEOF. Se ch è uguale a WEOF, l'operazione non riesce e non ci sono modifiche nel flusso.
Le chiamate a ungetwc () possono fallire se viene chiamato più di una volta senza alcuna operazione di lettura o riposizionamento nel mezzo.
Se una chiamata a ungetwc () ha successo, il flag di stato di fine file feof viene cancellato.
Sia per il flusso di testo che per quello binario, una chiamata riuscita a ungetwc modifica l'indicatore di posizione del flusso in un modo non specificato. Ma è garantito che dopo che tutti i caratteri respinti sono stati recuperati con un'operazione di lettura, l'indicatore di posizione del flusso è uguale al suo valore prima di chiamare ungetwc ().
Parametri ungetwc ()
- ch: Il carattere ampio da respingere.
- stream: flusso di file in cui il carattere largo viene respinto.
ungetwc () Restituisce il valore
- In caso di successo, la funzione ungetwc () restituisce il carattere ch.
- In caso di errore WEOF viene restituito senza modificare il flusso.
Esempio: come funziona la funzione ungetwc ()?
#include #include #include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.UTF-8"); wint_t c; long value = 0; wchar_t str() = L"u0037u0031u0039u00b6u03ee"; FILE *fp = fopen("file.txt", "r+"); fputws(str,fp); rewind(fp); while(1) ( c = fgetwc(fp); if (iswdigit(c)) value = value*10 + c - L'0'; else break; ) ungetwc(c, fp); cout << "Value = " << value << endl; fclose(fp); return 0; )
Quando esegui il programma, un possibile output sarà:
Valore = 719