C++ Reference: Standard C++ Library reference: C Library: cstdio: ungetc

C++官网参考链接:https://cplusplus.com/reference/cstdio/ungetc/

函数

ungetc
int ungetc ( int character, FILE * stream );

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

形参
character
要放回的字符的int提升。
放回时,该值在内部转换为unsigned char。
stream
指向标识输入流的FILE对象的指针。

返回值
成功时,返回被放回的character。
如果操作失败,则返回EOF。

用例
/* ungetc example */
#include

int main ()
{
  FILE * pFile;
  int c;
  char buffer [256];

  pFile = fopen ("myfile.txt","rt");
  if (pFile==NULL) perror ("Error opening file");
  else while (!feof (pFile)) {
    c=getc (pFile);
    if (c == EOF) break;
    if (c == '#') ungetc ('@',pFile);
    else ungetc (c,pFile);
    if (fgets (buffer,255,pFile) != NULL)
      fputs (buffer,stdout);
    else break;
  }
  return 0;
}
这个示例打开一个名为myfile.txt的现有文件以读取并打印它的行,但首先获取每行的第一个字符,并将其放回流中,将开头的#替换为@。

C++ Reference: Standard C++ Library reference: C Library: cstdio: ungetc_第1张图片

C++ Reference: Standard C++ Library reference: C Library: cstdio: ungetc_第2张图片

另请参考
getc    Get character from stream (function)
fgetc    Get character from stream (function)
putc    Write character to stream (function) 

你可能感兴趣的:(C++,Reference,C,Library,c++,c语言,ungetc,从流中放回字符)