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);
}