Функция ungetwc () в C ++ отправляет ранее прочитанный широкий символ обратно в поток, чтобы его можно было прочитать снова.
Функция ungetwc () определена в заголовочном файле.
прототип ungetwc ()
wint_t ungetwc (wint_t ch, FILE * поток);
Функция ungetwc () выталкивает широкий символ ch обратно в буфер, связанный с файловым потоком, если ch не равно WEOF. Если ch равно WEOF, операция завершается неудачно и поток не изменяется.
Вызов ungetwc () может завершиться ошибкой, если он вызывается более одного раза без какой-либо операции чтения или изменения положения в середине.
Если вызов ungetwc () успешен, флаг состояния конца файла feof сбрасывается.
И для текстового, и для двоичного потока успешный вызов ungetwc изменяет индикатор положения потока неопределенным образом. Но гарантируется, что после того, как все возвращенные символы извлечены с помощью операции чтения, индикатор позиции потока будет равен своему значению перед вызовом ungetwc ().
Параметры ungetwc ()
- ch: широкий символ, который нужно отодвинуть.
- stream: файловый поток, в котором широкий символ выталкивается назад.
ungetwc () Возвращаемое значение
- В случае успеха функция ungetwc () возвращает символ ch.
- В случае сбоя WEOF возвращается без изменения потока.
Пример: как работает функция 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; )
Когда вы запустите программу, возможный результат будет:
Значение = 719