我正在尝试从stdin读取宽字符到wchar_t
的数组。但是,[^characters]
的否定扫描集说明符(ls
)无法按预期正常工作。
目标是我希望每个空格都被读入str
而不是被忽略。因此,[^\n]
是我尝试过的,但没有运气,结果令人沮丧,并继续将乱码文本打印到标准输出。
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <wchar.h>
#include <wctype.h>
#include <locale.h>
int main(void)
{
wchar_t str[8];
if (setlocale(LC_ALL, "en_US.UTF-8") == NULL) {
fprintf(stderr, "Failed to set locale LC_ALL = en_US.UTF-8.\n");
exit(EXIT_FAILURE);
}
// correct (but not what I want)
// whitespaces and EOLs are ignored
// while (wscanf(L"%7ls", str) != EOF) {
// wprintf(L"%ls", str);
// }
// incorrect
// whitespaces (except EOLs) are properly read into str (what I want)
// input: 不要忽略白空格 (for instance)
// output: endless loop (garbled text)
while (wscanf(L"%7[^\n]ls", str) != EOF) {
if (ferror(stdin) && errno == EILSEQ) {
fprintf(stderr, "Encountered an invalid wide character.\n");
exit(EXIT_FAILURE);
}
wprintf(L"%ls", str);
}
}
答案 0 :(得分:1)
不要忽视空白......
数组
...尝试将宽字符读入wchar_t
要读取一行 text (所有字符,以及最多'\n'
的空格)到宽字符字符串,请使用{{1} };
fgetws()