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


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

    函数 

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

    形参 
    wc
    宽字符的wint_t提升被放回。
    该值在放回时内部转换为wchar_t。
    stream 
    指向标识输入流的FILE对象的指针。
    流还没有方向,或者是宽字符方向的(流上的第一个I/O操作决定它是面向字节的还是面向宽字符的,参见fwide)。

    返回值
    如果成功,宽字符就会被放回。
    如果操作失败,则返回WEOF

    用例
    /* ungetwc example */
    #include
    #include

    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的现有文件以读取并打印它的行,但首先获取每行的第一个字符并将其放回流中,除非行以#开头,在这种情况下,它被替换为@。

  • 相关阅读:
    ES6模块化(ES module)
    docker搭建kafka
    十四天学会C++之第八天:文件操作
    JAVA小游戏 “拼图”
    文献阅读-图文匹配的相似性推理和过滤
    新学期,新FLAG | 从心出发
    Go网络通信
    Java导出pdf格式文件
    VPX 插座(VITA46)介绍及应用 (简单介绍)
    Centos 7 用户密码忘记解决办法
  • 原文地址:https://blog.csdn.net/weixin_40186813/article/details/127482737