C++ Reference: Standard C++ Library reference: C Library: cwchar: ungetwc

发布于:2022-11-03 ⋅ 阅读:(694) ⋅ 点赞:(0)

C++官网参考链接:https://cplusplus.com/reference/cwchar/ungetwc/

函数 
<cwchar>
ungetwc
wint_t ungetwc (wint_t wc, FILE* stream);
从流中放回宽字符
宽字符wc实际上被放回到输入stream中,降低了它的内部文件位置,就像之前的getwc操作被撤消了一样。
这个宽字符可能是也可能不是前面输入操作中从stream中读取的字符。在任何情况下,从stream中获取到的下一个宽字符是wc,独立于原始字符。
但是请注意,这只影响该stream上的进一步输入操作,而不影响与之关联的物理文件的内容,对该函数的任何调用都不会修改该内容。
有些库实现可能支持多次调用这个函数,使字符以相反的放置顺序可用。尽管这种行为没有标准的可移植性保证,并且在第一次调用之后的任何数量的调用都可能失败。
如果成功,该函数清除stream的文件结束指示符(如果当前设置了该指示符)。位置指示符有未指定的值,直到再次读取或丢弃使用ungetwc放回的所有字符。
在stream上调用fseekfsetposrewind将丢弃之前通过此函数放回的任何字符。
如果作为wc传递的实参是WEOF,则操作失败,输入stream保持不变。
这相当于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的现有文件以读取并打印它的行,但首先获取每行的第一个字符并将其放回流中,除非行以#开头,在这种情况下,它被替换为@。
另请参考
ungetc    Unget character from stream (function)
getwc    Get wide character from stream (function)
fgetwc    Get wide character from stream (function)
putwc    Write wide character to stream (function) 


网站公告

今日签到

点亮在社区的每一天
去签到