控制台打印没有滚动

时间:2009-01-03 12:02:50

标签: console printing

嘿伙计们,我看到控制台应用程序打印颜色和看到的应用程序,如ffmpeg打印文本本身而不是新行。如何在现有线上打印?我想在我的控制台应用程序中显示fps,无论是在顶部还是在底部,并且有常规printfs去那里并正常滚动

CNC中 我需要这个用于Windows,但这是跨平台的,所以我最终会有一个linux和mac实现

7 个答案:

答案 0 :(得分:19)

有两个简单的可能性适用于linux和windows,但只适用于一行:

  • printf("\b");将返回一个字符,因此您可以计算您想要退回多少字符并在循环中触发它,或者您知道您只写了n个数字并且像执行它一样{{ {1}}
  • printf("\b\b\b\b\b\b\b\b\b\b");这会将光标返回到行的开头,因此任何下一个printf都会覆盖它。确保写一个长度相同或更长的字符串,以便完全覆盖它。

如果你想重写几行,没有像ncurses那样可移植的东西,几乎在每个操作系统上都有libs,你不需要处理ANSI差异。< / p>

编辑:添加了ncurses维基百科页面的链接,提供了很好的概述和介绍,以及链接列表和翻译成您的首选语言

答案 1 :(得分:3)

查看ncurses。它具有大多数脚本语言的绑定。

答案 2 :(得分:3)

您可以使用'\r'代替'\n'

答案 3 :(得分:2)

ASCII字符编号8(A.K.A. Ctrl-H,BS或Backspace)允许您备份一个字符。 ASCII字符编号13(A.K.A Ctrl-M,CR或回车符)在行的开始处返回光标。

如果您在C中工作,请尝试putchar(8);putchar(13);

答案 4 :(得分:2)

颜色的魔力,光标定位和闪亮等等都在ANSI escape codes内。任何能够处理ANSI代码的文本控制台都可以使用它们将它们打印到控制台(即通过bash脚本中的echo或C中的printf()函数)。

Unix终端支持ANSI转义序列和Windows世界用于在旧的MS-DOS时代支持它们,但多字节控制台支持结束了这一点。有更多信息here。但是,只有ANSI序列打印available on Windows还有其他方法。此外,如果您在Windows上安装了Cygwin,那么ANSI代码的工作方式与任何Unix终端一样好。

许多人提到Ncurses库,它是任何类似gui的文本应用程序的事实标准。这个库的作用是隐藏所有终端差异(Windows / Unix风格)以在所有平台上表示尽可能相同的相同信息,但根据我自己的经验,我告诉你这并不总是正确的(即典型的文本窗口框架)更改,因为特殊字符在所有字符编码下都不可用)。使用ncurses的对应物是它是一个完整的API,并且开始使用它比编写一些ANSI转义序列更简单,例如更改字体颜色,清理屏幕或将光标移回随机位置。

为了完整起见,我在Linux下粘贴一个使用ANSI序列的示例,将提示符更改为蓝色并显示日期:

PS1="\[\033[34m\][\$(date +%H%M)][\u@\h:\w]$ "

答案 5 :(得分:1)

您可以使用Ncurses -

  

ncurses包是一个子程序库,用于独立于终端的屏幕绘制和输入事件处理,为程序员提供高级屏幕模型,隐藏终端类型之间的差异并自动优化输出以更改一个屏幕上的文字到另一个

答案 6 :(得分:1)

根据您正在开发的平台,您可以使用更强大的API,而不是旧的ASCII控制代码。

e.g。如果您正在使用Win32,您实际上可以直接操作控制台屏幕缓冲区。

一个好的起点可能就在这里 http://msdn.microsoft.com/en-us/library/ms683171(VS.85).aspx

我一直在寻找类似的函数/ API,它允许我访问控制台,而不是其他平台的文本流。还没有找到任何东西,但话说回来,我一直没有那么努力。

希望它有所帮助。