【发布时间】:2021-05-13 17:57:22
【问题描述】:
我一直在尝试通过 ncurses 的函数打印出一个字符串类型变量,因为在我输入“initscr()”命令时“cout”无法正常工作。我创建了一个字符串变量数组,我试图在窗口上打印每一个字符串。我得到的结果是一些废话。这是我的代码中最关键的部分:
string *filetypes = new string[4];
filetypes[0] = ".png";
filetypes[1] = ".jpeg";
filetypes[2] = ".jpg";
filetypes[3] = ".gif";
initscr();
WINDOW *menu = newwin(height, width, y, x);
box(menu, 0, 0);
keypad(menu, true);
selection = menuShow(filetypes, 4, menu);
endwin();
我正在通过“menuShow”函数打印数组的值。这里也是函数的代码:
int menuShow(string *choices, int opt, WINDOW *menu)
{
int i, highlight = 0;
system("clear");
noecho();
wchar_t buttonPress;
do
{
refresh();
wrefresh(menu);
for(i = 0; i < opt; i++)
{
//xrwmatizei thn epilegmenh praksh sthn opoia vrisketai o cursor
if(i == highlight)
{
wattron(menu, A_REVERSE);
mvwprintw(menu, i + 1, 1, "%s", choices[i]);
wattroff(menu, A_REVERSE);
}
else
{
mvwprintw(menu, i + 1, 1, "%s", choices[i]);
}
}
wrefresh(menu);
refresh();
buttonPress = wgetch(menu);
switch(buttonPress)
{
case KEY_UP:
highlight--;
if(highlight == -1)
highlight++;
break;
case KEY_DOWN:
highlight++;
if(highlight > (opt - 1))
highlight--;
break;
default:
break;
}
}while(buttonPress != 10);
return highlight;
我得到的输出是:
~P/~[#�^?
~P/~[#�^?
~P/~[#�^?
~P/~[#�^?
有什么想法吗?
顺便提一下,在“endwin();”之后行,我正在使用 cout 打印出数组的字符串,并且它们正在正常打印。我认为发生这种情况的原因是“printw()”和 ncurses 的函数通常不支持“字符串”格式。所以,我的问题是:是否有任何方法可以在“initscr();”之后打印出字符串类型变量?行吗?
【问题讨论】:
-
请不要这样做
system("clear")。除了不必要——erase(); refresh()就足够了——它会以诅咒无法识别的方式改变屏幕。
标签: c++ arrays string output ncurses