# fgetwc

< c‎ | io

定义于头文件 `<wchar.h>` |  |
wint_t fgetwc( FILE *stream ); |  | (C95 起)
wint_t getwc( FILE *stream ); |  | (C95 起)

从给定的输入流读取下个宽字符。 getwc() 可以实现为宏，且可能对 `stream` 求值超过一次。

### 参数

stream | - | 要读取宽字符的流

### 返回值

来自流的下个宽字符，或若失败则为 WEOF 。

若文件尾条件导致了失败，则额外设置 `stream` 上的文件尾指示器（见 feof()) ）。若某其他错误导致了失败，则设置 `stream` 上的错误指示器（见 ferror() ）。

若出现编码错误，则另外设置 errno 为 `EILSEQ` 。

### 示例

    #include <stdio.h>
    #include <stdlib.h>
    #include <wchar.h>
    #include <errno.h>
    #include <locale.h>

    int main(void)
    {
        setlocale(LC_ALL, "en_US.utf8");
        FILE *fp = fopen("fgetwc.dat", "w");
        if(!fp) {
            perror("Can't open file for writing");
            return EXIT_FAILURE;
        }
        fputs("кошка\n", fp);
        fclose(fp);

        fp = fopen("fgetwc.dat", "r");
        if(!fp) {
            perror("Can't open file for reading");
            return EXIT_FAILURE;
        }
        wint_t wc;
        errno = 0;
        while ((wc = fgetwc(fp)) != WEOF)
            putwchar(wc);

        if (ferror(fp)) {
            if (errno == EILSEQ)
                puts("Character encoding error while reading.");
            else
                puts("I/O error when reading");
        } else if (feof(fp))
            puts("End of file reached successfully");

        fclose(fp);
    }

输出：

    кошка

### 引用

- C11 标准（ISO/IEC 9899:2011）：

  - 7.29.3.1 The fgetwc function (p: 421-422)

  - 7.29.3.6 The getwc function (p: 424)

- C99 标准（ISO/IEC 9899:1999）：

  - 7.24.3.1 The fgetwc function (p: 367)

  - 7.24.3.6 The getwc function (p: 369)

### 参阅

fgetc getc | 从文件流获取一个字符 (函数)
fgetws (C95) | 从文件流获取一个宽字符串 (函数)
fputwc putwc (C95) | 将一个宽字符写入文件流 (函数)
ungetwc (C95) | 将一个宽字符送回文件流 (函数)