在没有滚动的情况下打印到终端

时间:2014-09-19 04:39:21

标签: java c++ c

所以我一直想知道如何做一段时间,我想谁更好地问SO社区。

如果这有点模糊,我会事先道歉,但我会尽力解决我的问题。

我们都记得我们第一次遇到带有print语句的无限循环。终端快速填满,很快你就会看到一堆滚动文字......

如何让它不滚动?我的意思是......如何覆盖已经写过的行。

如何使用单行打印语句(不超过一个新行)进行无限循环,仅在一行上打印。终端不滚动的地方。

Instead of ....
    This is an infinite loop
    This is an infinite loop
    This is an infinite loop

You just have one line that updates every iteration of the loop.
    This is an infinite loop

感谢您的阅读,评论如果从那以后完全没有。我试图在阴天的世界里澄清......

PS - 我现在正在做的是在C中,但知道如何用其他语言做这件事并不会有什么坏处。

问题(0.1)

如果您想更新多条线路怎么办?

printf("This is some text\n");
printf("This is more text\n");

这会给我两行,我想更新它们,但不能滚动。

3 个答案:

答案 0 :(得分:3)

您可以使用回车转义序列,或\r。这会将光标返回到行的开头。

while (1)
{
    std::cout << "\rTest.";
}

答案 1 :(得分:3)

您只需要回车,而不是换行,因此您只需要使用&#34; \ r&#34; 回车意味着将光标移回到行的开头。 换行意味着向终端输入新线路。

在c:

while(1)
{
   printf("\r This is an infinite loop.");
}

由于printf是缓冲的,因此明确刷新输出流是一个好习惯。

答案 2 :(得分:1)

试试这个......

while(1)
{
  printf("this id infinite loop\n");
  sleep(1);
  system("clear");
}