我想从_O_U16TEXT
中读取stdin
格式的内容。但是fgetwc
和fgetws
似乎不适用于该模式。
fgetws
返回带有\n
的字符串。但是,它不会消耗\n
。结果,下次我调用fgetws
时,它只返回一个'\ n'。 fgetwc
也会发生这种情况。
我想知道为什么fgetws
不消耗\n
而是返回带有\n
的字符串以及如何正确读取_O_U16TEXT
的情况?
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <string.h>
#include <io.h>
#include <fcntl.h>
int main()
{
_setmode(_fileno(stdin), _O_U16TEXT);
_setmode(_fileno(stdout), _O_U16TEXT);
wchar_t ws[100];
fgetws(ws, 100, stdin);
wprintf(L"read: %s\n", ws);
wchar_t r[100];
fgetws(r, 100, stdin);
wprintf(L"read: %s\n", r);
return 0;
}
我希望输入两个字符串,并将它们保存在ws
和r
中。但是在输入一个字符串之后,程序停止了,并且r
是\n
。
我的操作系统是win10,编译器gcc 8.1.0。
答案 0 :(得分:0)
这是MinGW编译器中的错误。在_O_U16TEXT
模式下,即使您键入一次,其fgetws
函数也会读取两次换行符。您可能要跳过其他每行(以防万一,请检查要跳过的行是否为空)。