嘿,伙计们,我看到控制台打印应用程序的颜色和看到的应用程序等。打印文本本身,而不是一个新的线.我如何打印在现有线路?我想显示》在我的控制台应用程序,无论是在顶部或底部和定期printfs去那里滚动正常

-编辑 我需要这个窗口,但这是意味着要交叉平台,使我最终会有一个linux和mac执行情况

有帮助吗?

解决方案

有两个简单的可能性,其工作在linux上以及窗口,但是只有一线:

  • printf("\b"); 将返回的一个字,所以你可能最多的性格,你想退格和火灾这一循环,或者你知道,你只能写n号码而做到这样
    printf("\b\b\b\b\b\b\b\b\b\b");
  • printf("text to be overwritten by next printf\r"); 这将返回的标开始行,因此任何下printf将复盖它。确保写一串同样长或更长时间使你复盖它。

如果你想要写几行,没有什么所以作为便携式 ncurses, ,存库对于它在几乎每一个操作系统,和你没有照顾ANSI的差异。

编辑:增加了链接到ncurses维基百科的网页,给出了很好的概述和介绍,以及链接清单和可能的翻译到你喜欢的语言

其他提示

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

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

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

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

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

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

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

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

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

您可以使用 Ncurses -

  

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

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

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

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

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

希望它有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top