当前位置: C语言 -- 标准库 -- <wchar.h> -- ungetwc

ungetwc函数


概要:
#include <stdio.h>
#include <wchar.h>
wint_t ungetwc(wint_t c, FILE *stream);

描述:

该函数将参数c指定的宽字符推回参数stream指向的输入流。通过后续从输入流中读取输入,推回的宽字符将按推回顺序逆序返回。成功调用文件位置函数(例如:fseekfsetposrewind函数。)将会丢弃推回输入流的宽字符。通过调用ungetwc函数将宽字符推回输入流,会影响流的内部缓冲;但不会改变与流相关联的外部文件的内容。

使用ungetwc函数推回一个宽字符是有保证的,即使ungetwc函数的调用紧跟在格式化宽字符输入函数(例如:fwscanfvfwscanfvwscanf或者wscanf函数)的调用之后。如果未对流进行读取操作或者文件定位操作,对同一输入流多次调用ungetwc函数,操作可能会失败。

如果参数c的值等于宏WEOF,操作会失败,并且输入流保持不变。

成功调用ungetwc函数会清除流的文件末尾指示符(end-of-file indicator)。流的文件位置指示符(file position indicator)在读取或者丢弃所有推回宽字符后与推回宽字符前相同。对于文本流或者二进制流,成功调用ungetwc函数后文件位置指示符是不明确的,直至所有的推回宽字符被读取或者被丢弃。


参数:
wint_t c

推回流中的宽字符。推回时,会转换为wchar_t类型。

FILE *stream

FILE类型指针,指向推回宽字符的输入流。


返回值:

如果调用成功,函数返回推回输入流的宽字符;如果调用失败,函数返回WEOF


范例:
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
/*函数ungetwc范例*/

#include <locale.h>
#include <stdio.h>
#include <wchar.h>

int main(void)
{
    setlocale(LC_ALL, "");
    
    FILE *pFile;
    wint_t ch;

    pFile = fopen("gch.txt", "r+");

    /*将#替换为*后,输出文件内容。*/
    do
    {
        ch = getwc(pFile);
        /*将#替换为*。*/
        if(ch == L'#')
            ungetwc(L'*', pFile);
        else
            ungetwc(ch, pFile);

        /*输出替换过的文件内容。*/
        ch = getwc(pFile);
        putwchar(ch);
    }while(ch != WEOF);
    
    fclose(pFile);

    return 0;
}


结果:

假设文件gch.txt的内容为:

#第一名

#第二名

#第三名

将输出:

*第一名

*第二名

*第三名

程序执行后,文件gch.txt的内容没有发生改变,仍然为:

#第一名

#第二名

#第三名

注:使用Visual Studio编译。这里文本文件使用ANSI编码;ANSI编码详细介绍请查阅百度百科。


相关内容:
fgetws 从输入流读取宽字符串的函数。
getwc 从输入流读取宽字符的函数。
getwchar 从标准输入流读取宽字符的函数。
fgetwc 从输入流读取宽字符的函数。