ungetc、ungetwc

将一个字符推入流中。

int ungetc(
   int c,
   FILE *stream 
);
wint_t ungetwc(
   wint_t c,
   FILE *stream 
);

参数

  • c
    要推出的字符。

  • stream
    指向 FILE 结构的指针。

返回值

如果成功,这些函数都返回一个字符参数 c*。*如果 c 不能推回,或者未读取字符,输入流未更改,并且 ungetc 返回 EOF; ungetwc 返回 WEOF。 如果 stream 是 NULL,则会调用无效参数处理程序,如 参数验证 中所述。 如果允许继续执行,返回EOF 或 WEOF ,并将 errno 设置为 EINVAL。

有关这些属性和其他错误代码的信息,请参见 _doserrno、errno、_sys_errlist 和 _sys_nerr

备注

ungetc 函数将字符 c 推到 stream 上并清除文件结尾指示符。 流必须处于打开状态,用于读取。 在 stream上 的一个子序列读取操作从 c开始*。*使用 ungetc,推送 EOF 到流中的尝试将被忽略。

如果在字符从流中读取之前调用fflush、fseek、fsetpos或 rewind,在流中ungetc的字符可能被清除 。 文件位置指示符将具有字符推回之前的值。 与流相应的外部存储保持不变。 在成功 ungetc 调用文本流的基础上,文件位置指示符是未指定的,直到所有已推回的字符读取或被丢弃。 在每次成功的 ungetc 调用二进制流,文件位置指示符递减;如果调用前,它的值是 0,在调用后值是未定义。

如果 ungetc 被调用两次而没有读取,或者,没有这两次调用之间的文件定位操作,结果是不可预知的。 调用 fscanf后,ungetc 的调用可能失败后,除非另一个读取操作 (例如 getc) 执行了。 这是因为,fscanf 调用 ungetc。

ungetwc 是 ungetc的宽字符版本。 但是,在每次成功的 ungetwc 调用文本或二进制流,文件位置指示符的值是未指定的,直到所有已推回的字符读取或被丢弃。

这些函数在执行期间是线程安全和锁定敏感数据。 有关非固定版本,请参见 _ungetc_nolock、_ungetwc_nolock

一般文本例程映射

TCHAR.H 例程

未定义 _UNICODE & _MBCS

已定义 _MBCS

已定义 _UNICODE

_ungettc

ungetc

ungetc

ungetwc

要求

例程

必需的标头

ungetc

<stdio.h>

ungetwc

<stdio.h> 或 <wchar.h>

控制台在 Windows 应用商店 应用程序中不受支持。 与控制台 stdin、stdout 和 stderr 关联的标准流句柄必须重定向,然后 C 运行时函数才可以在 Windows 应用商店 应用程序中使用它们。 有关兼容性的更多信息,请参见兼容性

示例

// crt_ungetc.c
// This program first converts a character
// representation of an unsigned integer to an integer. If
// the program encounters a character that is not a digit,
// the program uses ungetc to replace it in the  stream.
//

#include <stdio.h>
#include <ctype.h>

int main( void )
{
   int ch;
   int result = 0;

   // Read in and convert number:
   while( ((ch = getchar()) != EOF) && isdigit( ch ) )
      result = result * 10 + ch - '0';    // Use digit.
   if( ch != EOF )
      ungetc( ch, stdin );                // Put nondigit back.
   printf( "Number = %d\nNext character in stream = '%c'", 
            result, getchar() );
}
  

.NET Framework 等效项

不适用。若要调用标准 C 函数,请使用 PInvoke。有关更多信息,请参见平台调用示例

请参见

参考

流 I/O

getc、getwc

putc、putwc