如何用c语言清除控制台屏幕上的特定输出,而不是使用系统(“cls”)清除整个屏幕?

如何用c语言清除控制台屏幕上的特定输出,而不是使用系统(“cls”)清除整个屏幕?,c,screen,C,Screen,我是c语言新手,正在制作一个基本的蛇游戏。为此,我创建了一个蛇应该在其中移动的边界,但为了移动蛇,我使用了一个循环来改变它的坐标,并且每次使用系统(“cls”)清除屏幕。 但由于这一点,我的边界也一次又一次地消失了。所以,我每次都在边界上使用一个循环将其带回来,这在播放时在屏幕上看起来不太好 因此,我是否可以只清除snake位置的最后一个输出,而不是使用system(“cls”)清除整个屏幕?要清除屏幕上的特定字符,必须将光标移动到该位置并写入空格 要移动光标,可以使用“转义序列”。一种便携式的

我是c语言新手,正在制作一个基本的蛇游戏。为此,我创建了一个蛇应该在其中移动的边界,但为了移动蛇,我使用了一个循环来改变它的坐标,并且每次使用系统(“cls”)清除屏幕。 但由于这一点,我的边界也一次又一次地消失了。所以,我每次都在边界上使用一个循环将其带回来,这在播放时在屏幕上看起来不太好


因此,我是否可以只清除snake位置的最后一个输出,而不是使用system(“cls”)清除整个屏幕?

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

要移动光标,可以使用“转义序列”。一种便携式的方法是使用

今天,大多数终端支持相同的转义序列集。您可以在web上的许多地方找到描述,包括本文档

例如,您可以编写:

 printf("%c[%d;%dH", 27, 5, 15);  // Move cursor to row 5 column 15
还有其他顺序可以擦除屏幕、擦除一行、从光标擦除到行的结尾或开始。还有更多。。。读这篇文章


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

了解比基本打印更高级的任何终端操作,并明确常见的方法是使用终端库,如@kaylum所述。您既可以查看ncurses,也可以使用转义序列实现基本的重印功能,这应该适用于大多数现代终端模拟器。使用备用屏幕。我在Windows上。非常感谢!但是,windows是否有ncurses?windows控制台支持转义序列请参阅文档:它们并非都是文档,但文章中有链接。基本上Windows支持类似XTerm的*nix系统。如果符合您的需要,请将我的答案标记为已接受。使用答案左边的复选标记。