La funzione ungetc () in C ++ rimanda il carattere letto in precedenza nello stream in modo che possa essere letto di nuovo.
La funzione ungetc () è definita nel file di intestazione.
ungetc () prototipo
int ungetc (int ch, FILE * stream);
La funzione ungetc () spinge il carattere ch indietro nel buffer associato al flusso di file a meno che ch non sia uguale a EOF. Se ch è uguale a EOF, l'operazione non riesce e non vi è alcun cambiamento nel flusso.
Le chiamate a ungetc () possono fallire se viene chiamato più di una volta senza alcuna operazione di lettura o riposizionamento nel mezzo.
Se una chiamata a ungetc () ha successo, il flag di stato di fine file feof viene cancellato.
Per i flussi binari, una chiamata riuscita a ungetc diminuisce di uno l'indicatore di posizione del flusso. Se l'indicatore di posizione del flusso è zero, il comportamento è indeterminato.
Per il flusso di testo, una chiamata riuscita a ungetc 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 ungetc ().
Parametri ungetc ()
- ch: Il personaggio da respingere.
- stream: flusso di file in cui il personaggio viene respinto.
ungetc () Restituisce il valore
- In caso di successo, la funzione ungetc () restituisce il carattere ch.
- In caso di errore, viene restituito EOF senza modificare il flusso.
Esempio: come funziona la funzione ungetc ()?
#include #include #include using namespace std; int main() ( int c; long value = 0; char str() = "101axc"; FILE *fp = fopen("file.txt", "r+"); fputs(str,fp); rewind(fp); while(1) ( c = fgetc(fp); if (isdigit(c)) value = value*10 + c - '0'; else break; ) ungetc(c, fp); cout << "Value = " << value << endl; fclose(fp); return 0; )
Quando esegui il programma, un possibile output sarà:
Valore = 101