如何在多行中使用 carriage return?

How to use carriage return with multiple line?

当我想在同一行中打印出另一个文本时,我可以这样做:

int i = 0;
string text = "Paragraph ";
while (i < 10) {
    if (clock() % CLOCKS_PER_SEC == 0) {
        cout << text << i + 1 << "\r";
        cout.flush();
        i++;
    }
}

但是,我怎样才能用多行来做到这一点?我想将一个段落作为一个整体保留在终端的初始位置。如果我将 text 更改为包含带有一些换行符的段落的字符串,它会在最后打印的段落下方打印另一个新段落块。

我怎样才能保持它的位置?

你的问题不是很清楚,但我假设你想知道如何覆盖当前行以外的地方的文本。

标准 C++ 不提供此功能。您将不得不使用 OS 特定功能将光标放置在控制台的任意位置。

在类 Unix 系统下,您通常会使用 ANSI escape sequences

在 Windows 下,您最好使用控制台操作功能,特别是 SetConsoleCursorPosition. Look here 更多控制台功能。

在标准 C++ 中是不可能的。

该技术取决于标准输出设备(即 std::cout)是什么 - 这很困难,因为这取决于操作系统和最终用户的选择。例如,许多物理终端(和 terminal/console 模拟器)支持转义序列。标准输出可以重定向到各种设备(包括文本文件,这使得定位光标有点毫无意义)。

一般来说,您将需要指定输出设备(即您的程序可以假设正在写入输出的设备)、主机系统、系统设置和一系列其他内容。然后使用主机系统支持的 API(或库)。根据您在此处的选择,技术变化很大。

unix下可能会用到curses等函数库。如果您使用 curses,可能需要使用其他 curses 函数来实际编写您的输出(而不是 cout)。

windows下有一组控制台API函数(winAPI的子集),如SetConsoleCursorPosition()。同样,如果您使用其他控制台功能而不是 cout.

可能会更容易