如何在C ++中将光标位置设置为行首?

时间:2012-11-26 20:23:01

标签: c++ linux

所以我正在尝试编写代码的一部分,然后覆盖它。像这样:

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

5 个答案:

答案 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)。