如何解决Ncurses mvwaddch() 在 getch()
当我运行此代码时,未绘制绘制框的两个 for()
循环。我已经用 gdb 测试过,它表明程序确实执行了这两个循环,但不知何故它没有出现。如果删除 while(true)
循环,则绘制框。那么,为什么?
#include <iostream>
#include <curses.h>
int main(){
std::pair<int,int> csr_pos{1,1};
initscr();
cbreak();
noecho();
keypad(stdscr,TRUE);
curs_set(0);
WINDOW *win = newwin(50,80,0);
if(has_colors()){
start_color();
init_pair(1,COLOR_CYAN,COLOR_BLACK);
init_pair(2,COLOR_RED,COLOR_BLACK);
init_pair(3,COLOR_WHITE,COLOR_RED);
init_pair(4,COLOR_YELLOW,COLOR_BLACK);
}
for(int i = 0; i<80; i++){
mvwaddch(win,i,'#');
mvwaddch(win,49,'#');
wrefresh(win);
}
for(int i = 1; i<49; i++){
mvwaddch(win,79,'#');
wrefresh(win);
}
mvwaddch(win,csr_pos.first,csr_pos.second,'@');
while(true){
int ch = getch();
if(ch==KEY_LEFT){
mvwaddch(win,' ');
csr_pos.second--;
mvwaddch(win,'@');
}
if(ch==KEY_RIGHT){
mvwaddch(win,' ');
csr_pos.second++;
mvwaddch(win,'@');
}
wrefresh(win);
}
}
解决方法
问题是您使用了 getch()
而不是 wgetch(win)
。另一个需要注意的是你声明的窗口的大小,这可能会导致类似的错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。