Home C&C++函数库 c++ 语法 程序源码 Linux C库

ungetwc

函数   <cwchar>

wint_t ungetwc (wint_t wc, FILE* stream);

返还从流中获取的宽字符

宽字符wc实际上被返还到输入流中,回退它的内部文件位置,就像之前的getwc操作被撤消一样。
这个宽字符可能是从前面的输入操作中读取的流,也可能不是。
在任何情况下,从stream中查找的下一个宽字符和wc无关。

但是请注意,这只会影响流上进一步的输入操作,而不会影响与之关联的物理文件的内容, 对该函数的任何调用都不会修改物理文件的内容。

一些标准库实现可能支持多次调用该函数,使字符按放回原处的相反顺序可用。 但是这种行为没有标准的可移植性保证,而且在第一次调用之后的任意次数调用都可能失败。

如果成功,函数将清除stream的文件结束指示符(如果当前设置了该指示符)。
位置指示器有未指定的值,直到所有用ungetwc放回的字符被再次读取或丢弃。

如果stream调用fseekfsetposrewind则将丢弃之前用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的现有文件来读取并打印它的行, 但是首先获取每一行的第一个字符并将其放回流中,除非该行以#开头,在这种情况下它将被@替换。

🍄  另请参阅



ungetc 返还从流中获取的字符(function )
getwc 从流中获得宽字符(function )
fgetwc 从流中获得宽字符(function )
putwc 向流中写入宽字符(function )

联系我们 免责声明 关于CandCplus 网站地图