📜  C++ ungetwc()

📅  最后修改于: 2020-09-25 09:40:48             🧑  作者: Mango

C++中的ungetwc() 函数将先前读取的宽字符推回到流中,以便可以再次读取它。

ungetwc() 函数在头文件中定义。

ungetwc()原型

wint_t ungetwc( wint_t ch, FILE* stream );

除非ch等于WEOF,否则ungetwc() 函数会将宽字符 ch推回与文件流关联的缓冲区。如果ch等于WEOF,则操作失败,并且流中没有变化。

如果多次调用ungetwc(),而中间没有任何读取或重新定位操作,则调用可能会失败。

如果对ungetwc()的调用成功,则清除文件状态标志feof的结尾。

对于文本流和二进制流,成功调用ungetwc都会以未指定的方式修改流位置指示符。但是可以保证,在通过读取操作检索到所有推回的字符之后,流位置指示符等于其值,然后调用ungetwc()。

ungetwc()参数

ungetwc()返回值

示例: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"\u0037\u0031\u0039\u00b6\u03ee";
    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;
}

运行该程序时,可能的输出为:

Value = 719