当我想在同一行打印出另一个文本时,我可以这样做:
int i = 0;
string text = "Paragraph ";
while (i < 10) {
if (clock() % CLOCKS_PER_SEC == 0) {
cout << text << i + 1 << "\r";
cout.flush();
i++;
}
}
但是,我怎么能用多行做到这一点?我希望在终端的初始位置保留一个整段。如果我使用包含带有换行符的段落的字符串更改text
,则会在最后一次打印的下方打印另一个新段。
我如何保留它的位置?
答案 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
。