【问题标题】:How can I clear the particular outputs from the console screen in c language rather than using system("cls") which clear the whole screen? [duplicate]如何以 c 语言从控制台屏幕清除特定输出,而不是使用清除整个屏幕的 system("cls")? [复制]
【发布时间】:2021-05-15 07:05:15
【问题描述】:

我是 c 语言的新手,正在创建一个基本的蛇游戏。为此,我创建了一个蛇应该移动的边界,但是为了移动蛇,我使用了循环,它改变了它的坐标,并在每次使用 system("cls") 时清除屏幕。 但正因为如此,我的边界也在一次又一次地消失。所以,我在边界上使用了一个循环,每次都把它带回来,在播放时在屏幕上看起来不太好。

那么,我可以只清除蛇位置的最后输出,而不是使用 system("cls") 清除整个屏幕吗?

【问题讨论】:

  • 对于任何比基本打印和清除更高级的终端操作,常见的方法是使用终端库,例如ncurses
  • 您既可以像@kaylum 所说的那样查看 ncurses,也可以使用转义序列实现基本的重印功能,这应该适用于大多数现代终端仿真器。 Xterm Control Sequences 。为此使用备用屏幕。
  • 我在windows上

标签: c screen


【解决方案1】:

要清除屏幕上的特定字符,您必须将光标移动到该位置并写一个空格。

要移动光标,您可以使用“转义序列”。一种可移植的方式是使用ncurses

如今,大多数终端都支持相同的转义序列集。您可以在网络上的许多地方找到描述,包括此 wiki article

你可以例如写:

 printf("%c[%d;%dH", 27, 5, 15);  // Move cursor to row 5 column 15

还有其他序列可以擦除屏幕、擦除一行、从光标擦除到行尾或行首。还有更多...阅读文章...

顺便说一句,Windows 支持这些转义序列。阅读documentation

【讨论】:

  • 非常感谢!但是,windows 有 ncurses 吗?
  • Windows 控制台支持转义序列请参阅文档:docs.microsoft.com/en-us/windows/console/… 它们并非所有文档,但文章中有链接。基本上 Windows 支持 XTerm,如 *nix 系统。
  • 请在我的回答符合您的需要时将其标记为已接受。使用答案左侧的复选标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-11
  • 2012-11-10
  • 2012-02-07
相关资源
最近更新 更多