【问题标题】:Updating text displayed on the terminal更新终端上显示的文本
【发布时间】:2014-06-05 23:35:36
【问题描述】:

我正在尝试用 C 创建一个生命游戏程序,但我不太熟悉更新终端上显示的输出的过程。

因此,例如,我将有一个 2d 字符数组,其中每个元素将包含一个“#”或一个“-”。我会将这个数组打印到屏幕上,但不是每次状态发生变化时都打印一个新的二维数组,而是想用新的状态覆盖终端中的旧数组。

我已经想方设法做到这一点,但运气不佳。我发现最接近的是 printf 函数 (\r) 中的回车,但希望有人能告诉我最好的方法。

具体来说,我如何在屏幕上打印出一个二维数组,改变数组的元素,然后在旧数组的顶部打印出新数组,即覆盖它。

【问题讨论】:

  • 您有什么具体问题吗?
  • 我已经更新了问题
  • 在上面是什么意思?
  • Windows、Linux、iOS...?
  • 对不起,Linux平台

标签: c arrays linux printf output


【解决方案1】:

(其中一些链接、代码 sn-ps 是 Linux,而其他是 Windows)
鉴于您的具体问题,(假设您知道如何将数组写入控制台):

1) 写入第一个数组。
2) 然后清除控制台(或 覆盖控制台)
像这样的:

#include <stdlib.h>

void main()
{
   system("cls");
}     

或将以下内容写入标准输出:(Linux)

write(1,"\E[H\E[2J",7);

这是 /usr/bin/clear 所做的,只是它不会创建另一个进程。
或两者兼有:

 void clear_screen()
 {
  #ifdef WINDOWS
     system ( "CLS" );
  #else
     // Assume POSIX
     system ( "clear" );
  #endif
 }  

More Options Here

3)写下一个数组

【讨论】:

  • Ryyker,很抱歉没有早点发表评论,一直在工作。这看起来可能正是我一直在寻找的!我稍后会试试这个,如果一切顺利的话,我会勾选解决方案。谢谢:)
  • @syco_link - 是的,这种工作有时会妨碍工作。
  • 完美清屏,正是我想要的!你有没有机会解释 write 函数中的表达式,或者指向我的一些文档?谢谢!
  • 搜索"\EH\E[2J" [HERE。它本质上是shell脚本。上面写了很多,非常有用。
【解决方案2】:

你可以试试这样的:

#include<stdio.h>

int main(void)
{

printf ("#####-----\r");
printf ("-#####----\r");

}

不确定我是否真的回答了你的问题。如果这不是你的答案,那么你肯定在寻找类似ncurses 的东西。

【讨论】:

  • 抱歉,数组是二维的,所以它可能是终端上的 10 x 10 网格。据我所知 \r 只会处理一行而不是更多,但我会研究 ncurses,谢谢!
猜你喜欢
  • 2017-08-31
  • 2014-02-23
  • 2022-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多