所以我正在尝试编写代码的一部分,然后覆盖它。像这样:
10 seconds have passed
11 seconds have passed
12 seconds have passed
不使用新行进行打印。所以我不想使用这样的东西:
std::cout<<"10 seconds have passed\n"
std::cout<<"11 seconds have passed\n"
我该怎么做?我正在运行Kubuntu Linux
答案 0 :(得分:7)
这就是回车符所用的内容:\r
。它以打字机的机制命名,它将纸架返回到右侧,这样打字员可以从一行的开头继续打字。试试这个:
std::cout << "10 seconds have passed";
std::cout << "\r11";
当然,两者之间没有延迟(除非等待I / O),您不太可能看到更改,但您至少会看到11 seconds have passed
的输出{{1}无处可见。
如何显示回车符完全取决于你输出的内容,但这是它的意图。对于更复杂的跨平台终端输出,请查看ncurses。
答案 1 :(得分:2)
#include <conio.h>
#include <consoleapi.h>
void gotoxy(short x, short y)
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position = { x, y };
SetConsoleCursorPosition(hStdout, position);
}
如果您需要更好地移动控制台。 (我不知道为什么它没有显示核心#include conio.h
答案 2 :(得分:1)
尝试
cout<<"\roverride"
最后没有换行符。 \ r \ n表示回车,表示跳转到一行的开头。
答案 3 :(得分:1)
回车'\r'
负责回到行首。
并非您必须覆盖已写入的所有字符,因为它们不会在显示时自动删除。
并且不要忘记调用std :: cout的flush,因为否则在unix机器上你可能看不到任何结果,直到它被刷新。
答案 4 :(得分:0)
除了\r
(将您带回到行的开头),您还可以使用\b
字符来取回一个字符。如果你必须做更复杂的事情,你必须使用VT100转义码或某些库(如ncurses)。