C ++控制台插入文本而不会覆盖

时间:2019-03-17 20:00:40

标签: c++ console command-line-interface ascii cout

我有一个C ++函数要被某个线程调用;该函数在控制台中插入一行文本(使用ANSI),而不会中断当前用户的输入。

这很好用,直到到达控制台底部为止,因为控制台没有自动滚动,所以用户输入被覆盖,就像这样:

Screenshot of CLI error.

代码:

void log_insert(std::string& line)
{
    static int num_of_lines = 1;

    // save horizontal cursor position
    std::cout << "\033[s";

    // insert <X> number of lines (\033[<X>L)
    std::cout << "\033[" << num_of_lines + 1 << "L";

    // move cursor to beginning
    std::cout << "\033[G";

    // print text
    std::cout << line << "\n";

    // restore horizontal cursor position
    std::cout << "\033[u";

    // move down <X> number of lines
    std::cout << "\033[" << num_of_lines + 1 << "B";
}

我知道那里有一些CLI的库,但是我认为这很容易解决。我尝试使用ANSI滚动,但没有任何运气。

1 个答案:

答案 0 :(得分:0)

您可以通过使用此方法将控制台光标设置为开头来解决您的问题:

void setCursor(int x, int y) {
    HANDLE hOut;
    COORD position;

    hOut = GetStdHandle(STD_OUTPUT_HANDLE);

    position.X = x;
    position.Y = y;
    SetConsoleCursorPosition(hOut, position);
}