如何在单个垂直线上重复输出?

问题描述 投票:1回答:1

每次输入新的输入时,我都试图让播放器的输入连续垂直打印。出于某种原因,每次输入新值时,它都会输出一个占整个输入大小的空间。我不知道为什么会这样,因为我相信代码永远不会告诉它添加这样的空间。

我曾尝试过更换光标位置并每次刷新页面,但这没有用。我已经搜索了解决方案,但没有找到任何解决方案。我正在使用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
c++ ncurses
1个回答
0
投票

混合coutcurses效果不佳,因为后者将终端初始化为raw模式并模拟rawcooked(例如cbreak)模式。 cbreak对此一无所知,并假设输出是“ cooked”(即换行符转换为回车和换行符)。

cout相关(但并不完全相同)(同样,curses模拟事物)。

如果真的have

要将两者混合,则必须以nl and nonl结尾每一行并进行刷新以确保输出完整。但是,由于使用nl的输出还会使光标在光标所在位置上混淆(使光标将文本放置在屏幕上的错误位置),因此您只能临时执行此操作,以调试程序。
© www.soinside.com 2019 - 2024. All rights reserved.