如何使用多行回车?

时间:2015-03-30 10:55:32

标签: c++ carriage-return

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

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

但是,我怎么能用多行做到这一点?我希望在终端的初始位置保留一个整段。如果我使用包含带有换行符的段落的字符串更改text,则会在最后一次打印的下方打印另一个新段。

我如何保留它的位置?

2 个答案:

答案 0 :(得分:5)

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

标准C ++没有为您提供此功能。您必须使用特定于操作系统的功能将光标放在控制台的任意位置。

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

在Windows下,您最好通过控制台操作功能,特别是SetConsoleCursorPosition。查看here以获取更多控制台功能。

答案 1 :(得分:1)

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

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

一般而言,您需要指定输出设备(即您的程序可以假定输出正在写入的内容),主机系统,系统设置以及许多其他内容。然后使用主机系统支持的API(或库)。根据您的选择,这些技术变化很大。

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

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

,可能会更容易