每次输入新的输入时,我都试图让播放器的输入连续垂直打印。出于某种原因,每次输入新值时,它都会输出一个占整个输入大小的空间。我不知道为什么会这样,因为我相信代码永远不会告诉它添加这样的空间。
我曾尝试过更换光标位置并每次刷新页面,但这没有用。我已经搜索了解决方案,但没有找到任何解决方案。我正在使用ncurses
库,在这一点上,我感觉好像我必须忽略某些东西。
#include <iostream>
using namespace std;
#include <ncurses.h>
void initialize()
{
initscr();
clear();
cbreak();
noecho();
}
int main()
{
initialize();
char input;
bool turn = true;
short int x, y = 0;
while (turn) {
;
input = getch();
;
cout << "You entered: " << input << std::endl;
}
return 0;
}
这是输出:
You entered: d
You entered: j
You entered: w
You entered: i
You entered: d
You entered: j
You entered: a
You entered: i
You entered: w
You entered: j
You entered: a
You entered: d
You entered: i
You entered: w
You entered: j
You entered: d
You entered: i
You entered: d
You entered: d
应该是:
You entered: d
You entered: d
You entered: d
You entered: d
You entered: d
You entered: d
You entered: d
混合cout
和curses
效果不佳,因为后者将终端初始化为raw模式并模拟raw或cooked(例如cbreak
)模式。 cbreak
对此一无所知,并假设输出是“ cooked”(即换行符转换为回车和换行符)。
与cout
相关(但并不完全相同)(同样,curses模拟事物)。
如果真的have
要将两者混合,则必须以nl
and nonl
结尾每一行并进行刷新以确保输出完整。但是,由于使用nl
的输出还会使光标在光标所在位置上混淆(使光标将文本放置在屏幕上的错误位置),因此您只能临时执行此操作,以调试程序。