【发布时间】:2014-09-05 10:11:18
【问题描述】:
我想知道(如果可能的话)如何在 linux/mac/unix(不是 DOS)中清除/重置终端屏幕,就像在 windows/DOS 上使用“conio.h”中的 clrscr() 一样”。 我知道这里和网络上一般都有类似的问题,但我找不到能回答我的特殊情况的问题。
注意:我知道 curses/ncurses 和模拟 system("clear") 的解决方案,但这不是我想要的。 我想完全重置终端缓冲区(即我不想向下滚动或添加换行符来清除屏幕),请不要使用 curses/ncurses(我不喜欢 ncurses 屏幕模式,我想坚持默认模式)。
这是可能的还是我在问一些不可能的事情? :P 我正在尝试制作一个没有诅咒的控制台游戏(不完全是 roguelike),而且我不喜欢在通过向上滚动来清除之前看到我在屏幕上打印的内容。
编辑:我已经尝试过 system("reset"),这不是使用系统调用的好方法,使用该命令的延迟很糟糕,但它接近我想要做的......有什么可以做类似事情的函数/库?
我认为这也是一个很好的解决方案,可以执行 move(0,0) 之类的操作,然后再次打印我需要的内容或只是空白空间(这样我就不会滚动和上面的旧文本)。但我不知道是否有一个库可以做到这一点而无需取消诅咒模式。
现在在下面查看我自己的答案,我正在使用
printf("\033c");
目前工作正常,解决了我的问题。如果有人知道此解决方案有任何问题,请告诉我。
我对光标可见性有疑问。如果它被隐藏了,这段代码会再次显示,你知道解决方法吗?
谢谢,
佐加托内
【问题讨论】:
-
你的意思是像
reset命令吗? -
@Jayesh 没有重置将重新加载 bash shell 的 bash 命令?我不知道这是否能解决问题,但 system('reset') 恕我直言是个糟糕的选择
-
刚刚测试过,每次调用它都会导致严重的延迟,显示白屏。这不是我想要的,但如果我能修复延迟,这几乎就是我想做的
-
我认为
printf '\033c'会清除所有内容。也包括滚动条。 -
你说的是这个吗? [code] #include
#include main() { printf("按任意键运行clrscr().\n"); getch(); clrscr(); printf("清屏后\n"); printf("按任意键退出...\n"); getch();返回0; } [/code]