Funkcja ungetc () w C ++ wypycha poprzednio odczytany znak z powrotem do strumienia, aby można go było ponownie odczytać.
Funkcja ungetc () jest zdefiniowana w pliku nagłówkowym.
ungetc () prototyp
int ungetc (int ch, PLIK * strumień);
Funkcja ungetc () odkłada znak ch z powrotem do bufora związanego ze strumieniem pliku, chyba że ch jest równe EOF. Jeśli ch jest równe EOF, operacja kończy się niepowodzeniem i nie ma żadnych zmian w strumieniu.
Wywołania ungetc () mogą się nie powieść, jeśli zostanie wywołane więcej niż raz bez żadnej operacji odczytu lub zmiany położenia w środku.
Jeśli wywołanie ungetc () powiedzie się, feof flagi statusu końca pliku zostaje wyczyszczone.
W przypadku strumieni binarnych pomyślne wywołanie ungetc zmniejsza wskaźnik pozycji strumienia o jeden. Jeśli wskaźnik pozycji strumienia ma wartość zero, zachowanie jest nieokreślone.
W przypadku strumienia tekstowego pomyślne wywołanie ungetc modyfikuje wskaźnik pozycji strumienia w nieokreślony sposób. Ale jest zagwarantowane, że po pobraniu wszystkich wypchniętych znaków za pomocą operacji odczytu, wskaźnik pozycji strumienia jest równy swojej wartości przed wywołaniem funkcji ungetc ().
ungetc () Parametry
- ch: znak do cofnięcia.
- stream: strumień plików, w którym znak jest cofany.
ungetc () Wartość zwracana
- Po pomyślnym zakończeniu funkcja ungetc () zwraca znak ch.
- W przypadku błędu EOF jest zwracany bez zmiany strumienia.
Przykład: Jak działa funkcja 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; )
Po uruchomieniu programu możliwe wyjście to:
Wartość = 101