📅  最后修改于: 2020-09-25 09:40:48             🧑  作者: Mango
ungetwc() 函数在
wint_t ungetwc( wint_t ch, FILE* stream );
除非ch
等于WEOF,否则ungetwc() 函数会将宽字符 ch
推回与文件流关联的缓冲区。如果ch
等于WEOF,则操作失败,并且流中没有变化。
如果多次调用ungetwc(),而中间没有任何读取或重新定位操作,则调用可能会失败。
如果对ungetwc()的调用成功,则清除文件状态标志feof的结尾。
对于文本流和二进制流,成功调用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