如何使用多行回车

How to use carriage return with multiple line?

本文关键字:回车 何使用      更新时间:2023-10-16

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

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++无法提供此功能。您必须使用特定于操作系统的功能将光标放置在控制台的任意位置。

在类Unix系统下,您通常会使用ANSI转义序列

在Windows下,控制台操作功能为您提供了最佳服务,特别是SetConsoleCursorPosition。查看此处了解更多控制台功能。

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

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

一般来说,您需要指定输出设备(即您的程序可以假设输出被写入到什么)、主机系统、系统设置以及其他一些东西。然后使用主机系统支持的API(或库)。根据您在这里的选择,技术是高度可变的。

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

在windows下,有一组控制台API函数(win API的子集),例如SetConsoleCursorPosition()。同样,如果使用其他控制台功能,而不是cout,可能会更容易。