我正在尝试将宽字符读入标准输入的数组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);
}
}