c++ - 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,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,0,i,'#');
mvwaddch(win,49,i,'#');
wrefresh(win);
}
for(int i = 1; i<49; i++){
mvwaddch(win,i,0,'#');
mvwaddch(win,i,79,'#');
wrefresh(win);
}
mvwaddch(win,csr_pos.first,csr_pos.second,'@');
while(true){
int ch = getch();
if(ch==KEY_LEFT){
mvwaddch(win,csr_pos.first,csr_pos.second,' ');
csr_pos.second--;
mvwaddch(win,csr_pos.first,csr_pos.second,'@');
}
if(ch==KEY_RIGHT){
mvwaddch(win,csr_pos.first,csr_pos.second,' ');
csr_pos.second++;
mvwaddch(win,csr_pos.first,csr_pos.second,'@');
}
wrefresh(win);
}
}
解决方案
问题是您使用getch()
而不是wgetch(win)
. 要注意的另一件事是您声明的窗口的大小,这可能会导致类似的错误。
推荐阅读
- java - java - 如何使用java转义不在字符串行尾的```\n```字符?
- jenkins - Jenkins Pipeline Robot 框架测试结果未显示在主页上
- ffmpeg - ffmpeg 分段过滤器不适用于 strftime 文件名模板
- elasticsearch - 根据 Elasticsearch 中的嵌套字段值按表达式排序
- python - 寻找最接近多维数据点的点?
- python - Django - /uploaddd 上的 TypeError 不可散列类型:'dict'
- java - Jenkins groovy 管道:指定 Java 选项
- vue.js - 为什么组件显示两次?
- mysql - SQL 中的条件分组
- python-3.x - 创建一个给定边界框的蒙版