2012-11-26 73 views
0

所以我试图写一些代码的一部分,然后覆盖它。像这样:如何在C++中将光标位置设置为行首?

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的

回答

7

这就是回车符的用途:\r。它是以打字机机制命名的,它将纸托运回到右侧,以便打字员可以从一行的开头继续打字。试试这个:

std::cout << "10 seconds have passed"; 
std::cout << "\r11"; 

当然,两者之间没有延迟(也许除了在I/O等),你不可能看到的变化,但你至少会看到输出11 seconds have passed10无处可见。

如何显示回车符完全取决于您输出的内容,但这是它的意图。对于更复杂的跨平台终端输出,请看ncurses

+0

好的。谢谢你! – Predictability

+1

@Predictability如果我或其他人回答你的问题,请接受他们的答复说谢谢,只需点击友好的绿色勾号。谢谢。:) –

1

尝试

cout<<"\roverride" 

,并在最后没有断行。 \ r意味着carage返回,这意味着跳到一行的开头。

0

除了\r(将您带回到行的开头),您还可以使用\b字符来取回一个字符。如果你必须做更复杂的事情,你必须使用VT100转义码或一些库(如ncurses)。

1

回车'\r'负责回到行头。

不是说您必须重写所有已写入的字符,因为它们不会在显示屏上自动删除。

并且不要忘记调用std :: cout的flush,否则在unix机器上你可能看不到任何结果,直到它被刷新。

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

+0

您需要查看“Markdown帮助”(创建或编辑答案时的问号),了解如何正确设置代码的格式。或者只是使用'{}'按钮。 –

+0

conio.h中已经定义了'gotoxy()'吗? –

相关问题