我正在尝试在1x6窗口的光标位置打印字符ch。如果我输入's'/'k',我希望光标向右移动;如果我输入'a'/'j',我希望光标向左移动(如果光标在上方,则环绕到窗口的开始/结尾起始/结束位置)。但是,waddch不会在光标位置打印ch。我尝试使用mvwaddch并将ch从char类型更改为chtype,而ch仍未显示在光标位置。我缺少什么,所以无法打印ch?
chtype ch = 'X';
char ich;
int cols = 6;
int rows = 1;
WINDOW* win = newwin(rows, cols, 1, 1);
int delwin(WINDOW *win);
raw();
int currPos = 0;
initscr();
noecho();
for(int i = 0; i< 6; i++){
ich = getch();
if(ich == 'a' || ich == 'j'){
//printf("\nsddss\n");
//mvwaddch(win, 0,currPos - 1,ch);
wmove(win, rows, currPos - 1);
waddch(win, ch);
currPos--;
}else
if(ich == 's' || ich == 'k'){
//printf("sddss3333\n");
//mvwaddch(win ,0,currPos + 1,ch);
wmove(win, rows, currPos + 1);
waddch(win, ch);
currPos++;
}
wrefresh(win);
}
delwin(win);
endwin();
答案 0 :(得分:0)
wmove
调用失败,因为您正在窗外传递位置。坐标从零开始,并为其指定行数,将其放在窗口之后的下一行。
其他一些问题(getch
应该从窗口 win 中读取,而其他一些代码则是多余的。下面是一个快速修订:
#include <curses.h>
int
main(void)
{
chtype ch = 'X';
int cols = 6;
int rows = 1;
int i;
int currPos = 0;
WINDOW *win;
initscr();
raw();
noecho();
win = newwin(rows, cols, 1, 1);
for (i = 0; i < 6; i++) {
int ich = wgetch(win);
if (ich == 'a' || ich == 'j') {
if (currPos > 0) currPos--; else beep();
} else if (ich == 's' || ich == 'k') {
if (currPos < cols - 1) currPos++; else beep();
}
wmove(win, 0, currPos);
waddch(win, ch);
}
endwin();
return 0;
}