getwchar ()- 从 stdin 获取宽字符

格式

     #include <wchar.h>
     wint_t getwchar(void);

语言级别

ANSI

线程安全

语言环境敏感

此函数的行为可能受当前语言环境的 LC_CTYPE 类别影响。 如果在编译命令上指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么它也可能受当前语言环境的 LC_UNI_CTYPE 类别影响。 当在编译命令上指定 LOCALETYPE (*CLD) 时,此功能不可用。 有关更多信息,请参阅 了解 CCSID 和语言环境

集成文件系统界面

当在编译命令上指定 SYSIFCOPT (*NOIFSIO) 时,此功能不可用。

宽字符函数

有关更多信息,请参阅 宽字符

描述

getwchar() 函数从 stdin 读取下一个多字节字符,将其转换为宽字符,并推进 stdin的关联文件位置指示符。 对 getwchar() 函数的调用等同于对 getwc(stdin)的调用。

如果在同一流上的后续读操作之间更改了当前语言环境,那么可能会出现未定义的结果。 将非宽字符函数与 stdin 上的 getwchar() 函数配合使用会导致未定义的行为。

返回值

getwchar() 函数返回 stdin 或 WEOF 中的下一个宽字符。 如果 getwchar() 函数迂到 EOF ,那么它会为流设置 EOF 指示符并返回 WEOF。 如果发生读错误,那么将设置流的错误指示符,并且 getwchar() 函数将返回 WEOF。 如果在将多字节字符转换为宽字符期间发生编码错误,那么 getwchar() 函数会将 errno 设置为 EILSEQ 并返回 WEOF。

使用 ferror()feof() 函数来确定是发生了错误还是 EOF 条件。 仅当尝试读取超过最后一个字节的数据时,才会达到 EOF。 读取数据的最后一个字节 (包括最后一个字节) 不会打开 EOF 指示符。

有关 getwchar()的 errno 值的信息,请参阅 fgetwc ()-从流读取宽字符

示例

此示例使用 getwchar() 从键盘读取宽字符,然后打印宽字符。
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
 
int main(void)
{
   wint_t  wc;
 
   errno = 0;
   while (WEOF != (wc = getwchar()))
      printf("wc = %lc\n", wc);
 
   if (EILSEQ == errno) {
      printf("An invalid wide character was encountered.\n");
      exit(1);
   }
   return 0;
 
   /***************************************************************
      Assuming you enter: abcde
 
      The output should be:
 
      wc = a
      wc = b
      wc = c
      wc = d
      wc = e
   ***************************************************************/
}

相关信息