ungetc ()- 将字符推送到输入流

格式

#include <stdio.h>
int ungetc(int c, FILE *stream);

语言级别

ANSI

线程安全

描述

ungetc() 函数将无符号字符 c 推送回给定输入 。 但是,如果连续调用 ungetc() ,那么仅保证将一个连续字符推送回输入流。 必须打开 以进行读取。 上的后续读操作以 c开头。 字符 c 不能是 EOF 字符。

如果在从 读取字符之前调用 fseek()fsetpos()rewind()fflush() ,那么将擦除 ungetc() 放置在流上的字符。

返回值

ungetc() 函数返回转换为 unsigned char的整数自变量 c ,如果无法回推 c ,那么返回 EOF

errno 的值可以设置为:
含义
阅读
未打开该文件以执行读操作。
EIOERROR
发生了不可恢复的I/O错误。
EIORECERR
发生了可恢复的I/O错误。

使用 type=record打开的文件不支持 ungetc() 函数。

示例

在此示例中, while 语句通过使用算术语句在读取数字时组成数字的数字值,从输入数据流中读取十进制数字。 当非数字字符出现在文件末尾之前时, ungetc() 会将其替换在输入流中,以便以后的输入函数可以对其进行处理。
#include <stdio.h>
#include <ctype.h>
 
int main(void)
{
   FILE *stream;
   int ch;
   unsigned int result = 0;
   while ((ch = getc(stream)) != EOF && isdigit(ch))
      result = result * 10 + ch - '0';
   if (ch != EOF)
      ungetc(ch,stream);
         /* Put the nondigit character back */
   printf("The result is: %d\n", result);
   if ((ch = getc(stream)) != EOF)
      printf("The character is: %c\n", ch);
}

相关信息