当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C语言 ungetc用法及代码示例


C语言stdio头文件(stdio.h)中ungetc函数的用法及代码示例。

用法:

int ungetc ( int character, FILE * stream );
从流中取消角色
A 字符实际上被放回输入中,降低其内部文件位置好像以前getc操作被撤消。

字符可能是也可能不是从在前面的输入操作中。无论如何,从中检索下一个字符是个字符传递给此函数,与原始函数无关。

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

某些库的实现可能支持多次调用此函数,从而使字符以相反的顺序可用放回去。尽管此行为没有标准的可移植性保证,并且在除第一个调用之外的任何数量的调用之后,其他调用都可能完全失败。

如果成功,该函数将清除文件结束指示符(如果当前已设置),并减少其内部文件位置指示如果它以二进制模式运行;在文字模式下,位置指示器具有未指定的值,直到所有字符都放回ungetc已被读取或丢弃。

调用fseekfsetpos或者rewind会丢弃以前使用此函数放回其中的所有字符。

如果参数传递给字符参数是EOF,操作失败,输入保持不变。

参数

character
这个int推广角色要放回去。
该值在内部转换为unsigned char当放回去。
stream
指向一个指针FILE标识输入流的对象。

返回值

成功之后,字符放回去。
如果操作失败,EOF返回。

示例

/* ungetc example */
#include <stdio.h>

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标准库大神的英文原创作品 C ungetc function。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。