ungetwc
函数 <cwchar>
wint_t ungetwc (wint_t wc, FILE* stream);
返还从流中获取的宽字符
宽字符wc实际上被返还到输入流中,回退它的内部文件位置,就像之前的
getwc操作被撤消一样。
这个宽字符可能是从前面的输入操作中读取的流,也可能不是。
在任何情况下,从stream中查找的下一个宽字符和wc无关。
但是请注意,这只会影响流上进一步的输入操作,而不会影响与之关联的物理文件的内容,
对该函数的任何调用都不会修改物理文件的内容。
一些标准库实现可能支持多次调用该函数,使字符按放回原处的相反顺序可用。
但是这种行为没有标准的可移植性保证,而且在第一次调用之后的任意次数调用都可能失败。
如果成功,函数将清除stream的文件结束指示符(如果当前设置了该指示符)。
位置指示器有未指定的值,直到所有用ungetwc放回的字符被再次读取或丢弃。
如果stream调用
fseek、
fsetpos或
rewind则将丢弃之前用ungetwc函数放回的任何字符。
如果作为wc传递的参数是
WEOF,则操作失败,输入流保持不变。
这相当于
ungetc
(<
cstdio>)的宽字符版本。
☲ 参数
wc
要返还的转换为
wint_t的宽字符.
当放回该值时,该值会在内部转换为
wchar_t。
stream
指向标识输入流的
FILE对象的指针。
流不区分字符模式(流上的第一次i/o操作确定它是单字符还是宽字符,请参见
fwide)。
☉ 返回值
成功后,把宽字放回原处。
如果操作失败,则返回
WEOF。
☣ 示例
/* ungetwc example */
#include <stdio.h>
#include <wchar.h>
int main ()
{
FILE * pFile;
wint_t wc;
wchar_t buffer [256];
pFile = fopen ("myfile.txt","rt");
if (pFile!=NULL) while (!feof (pFile)) {
wc=getwc (pFile);
if (wc != WEOF) {
if (wc == L'#') ungetwc (L'@',pFile);
else ungetwc (wc,pFile);
fgetws (buffer,255,pFile);
fputws (buffer,stdout);
}
}
return 0;
|
这个例子打开一个名为myfile.txt的现有文件来读取并打印它的行,
但是首先获取每一行的第一个字符并将其放回流中,除非该行以#开头,在这种情况下它将被@替换。
🍄 另请参阅