Geo*_*eyB 1 c++ wchar-t ncurses
我目前正在研究一个C ++项目,在该项目中我需要显示一些扩展字符(wchar_t)。
主要的问题是,即使它在C(使用wprintf)中可以正常工作,也不能在使用mvwaddwstr或的c ++中运行waddwstr。当然,我已将语言环境设置为: setlocale(LC_ALL, "");,并且不显示任何内容。
有人以前有这个问题吗,或者对此有想法?
谢谢。
这是代码:
struct charMap { int x; int y; wchar_t value };
int i, x, y;
wchar_t str[2];
struct charMap _charMap[2] = {
{0,0,9474}
{29, 29, 9474}
};
initscr();
setlocale(LC_ALL, "");
for (y = 0 ; y < 30 /* length */ + 2 ; y++) {
for (x = 0 ; x < 30 /* width */ + 2; x++) {
for (i = 0 ; i < 2 ; i++) {
if ((x == _charMap[i].x || _charMap[i].x == -1) &&
(y == _charMap[i].y || _charMap[i].y == -1)) {
str[0] = _charMap[i].value;
str[1] = L'\0';
mvwaddwstr(stdscr, y, x, str);
break;
}
}
}
}
refresh();
while(1);
Run Code Online (Sandbox Code Playgroud)
_charMap是一个结构表,其中包含有用的值以便于进行比较(避免使用繁重的if ... else if ... else结构)。_charMap[].value是wchar_t,并且_charMap[].x是int,例如_charMap[].y。
你需要setlocale(LC_ALL, "") 之前做initscr()。
一个工作示例:
#include <ncursesw/ncurses.h>
#include <locale.h>
#include <wchar.h>
int main() {
setlocale(LC_ALL, "");
initscr();
wchar_t wstr[] = { 9474, L'\0' };
mvaddwstr(0, 0, wstr);
refresh();
getch();
endwin();
return 0;
}
Run Code Online (Sandbox Code Playgroud)