如何使用多行回车
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++无法提供此功能。您必须使用特定于操作系统的功能将光标放置在控制台的任意位置。
在类Unix系统下,您通常会使用ANSI转义序列
在Windows下,控制台操作功能为您提供了最佳服务,特别是SetConsoleCursorPosition。查看此处了解更多控制台功能。
这在标准C++中是不可能的。
该技术取决于标准输出设备(即std::cout
)是什么,这很困难,因为这取决于操作系统和最终用户的选择。例如,许多物理终端(以及终端/控制台模拟器)都支持转义序列。标准输出可以重定向到各种设备(包括文本文件,这使得定位光标有点毫无意义)。
一般来说,您需要指定输出设备(即您的程序可以假设输出被写入到什么)、主机系统、系统设置以及其他一些东西。然后使用主机系统支持的API(或库)。根据您在这里的选择,技术是高度可变的。
在unix下,可能会使用curses之类的函数库。如果使用curses,则可能需要使用其他curses函数来实际编写输出(而不是cout
)。
在windows下,有一组控制台API函数(win API的子集),例如SetConsoleCursorPosition()
。同样,如果使用其他控制台功能,而不是cout
,可能会更容易。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- C++:TypeDef使用元组
- 使用std::multimap迭代器创建std::list
- 从不同线程使用int64的不同字节安全吗
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 为什么在全局范围内使用"extern int a"似乎不行?
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用Google Mock来模拟gettimeofday()
- 如何使用默认参数等选择模板专业化
- 为什么使用 "this" 指针调用派生成员函数?
- 在不使用空格或回车的情况下输入两个数据
- 如何使用多行回车
- 使用 LLVM 的 libc++ 时,__1 符号从何而来?
- 在std::cout之后使用std::cin时,换行符从何而来
- 使用 c++ 查找回车/换行组合
- 使用 QIODevice::write 方法添加" "而不是回车
- 为什么以及在何处在C++中使用引用和指针
- 使用boost::regex时,如何指定回车符和换行符匹配
- 基例如何影响使用递归函数的哪些行