c++ - Ncurses - “移动”及其衍生词删除屏幕内容
问题描述
我是一名新手程序员,目前正在编写一个简单的 Ncurses 应用程序,但我遇到了这样一个问题 - 调用该move
函数或mvwadch
作为示例在我移动到的地方后清理窗口内容。代码如下:
#include <string>
#include <ncurses.h>
void function(WINDOW* win)
{
std::string somestring = "Test";
waddstr(win, somestring.c_str());
wmove(win , 0, 1);
wrefresh(win);
}
WINDOW* win_ = initscr();
int main()
{
function(win_);
wgetch(win_);
endwin();
}
它只留下“T”,例如,如果somestring
是“Test”。
PS 抱歉,英语和 c++ 可能不好。
解决方案
您的程序不会等待用户输入(例如,调用getch
)并立即退出而不调用endwin
. 因为 ncurses 将终端初始化为原始模式,这使终端处于原始模式,因此您的 shell 无法立即将换行符正常转换为回车/换行(尽管大多数 shell 通过将模式重置为煮熟)。这会导致一些文本被覆盖,因为(而不是前进到换行符)shell 提示符与文本消息写在同一行上。
推荐阅读
- git - 无法将提交推送到主分支:预接收挂钩拒绝错误
- laravel - VueJS Axios链请求动态数组vs静态数组报错
- javascript - 拼接到新的阵列行后,对接收阵列所做的更改会反映在它和源阵列中。为什么?
- mysql - 如何使用 Express/MySQL 构建复合对象列表?
- android - 我正在尝试将电容器 v3 插件注册到 Android,但没有任何效果
- angular - 无法调试 Angular 项目,缺少 .Map 文件
- airflow - Airflow DAG“似乎只存在于本地。主调度器似乎没有意识到它的存在”
- node.js - 获取 Windows 和 Nodejs 上的 CPU 使用百分比
- typescript - 给定 Typescript 文件上的命名导出,是否可以找到引用它的所有文件
- .net - 如何有条件地/动态地在 Asp.Net Core Razor 页面中包含 Razor 子页面?