【问题标题】:printf console formattingprintf 控制台格式化
【发布时间】:2011-04-01 17:42:29
【问题描述】:

我想用 printf 制作一个控制台显示,定期在 3 个通道上获得一些输入,我想打印如下行:

Channel1 Last_message_1
Channel2 Last_message_2
Channel3 Last_message_3

当通道 2 上出现新消息时,我想覆盖控制台的那部分。喜欢:

Channel1 Last_message_1
Channel2 New_message_2
Channel3 Last_message_3

我知道这类事情可以用 printf 完成,但我不记得怎么做了。有什么指点吗?

【问题讨论】:

    标签: user-interface console printf


    【解决方案1】:

    这篇文章可能有用:

    print to screen from c console application overwriting current line

    特别是回答 #2(不是选定的答案)

    【讨论】:

      【解决方案2】:

      据我所知,您只能使用 printf 更改最后一行,而这里您想更改任何行,所以我认为您需要查看 ncurses

      【讨论】:

        【解决方案3】:

        您无法使用 printf 便携地执行此操作。如果您的控制台支持它,您可以向它发送 ANSI 控制代码来定位光标——但是 ANSI 控制代码相当笨拙,并且相当多的“控制台”只是不支持它们,在这种情况下您会得到一个您尝试生成的数据有很多额外的垃圾。

        剩下的就是使用至少在理论上不可移植的东西。如果便携性仍然很重要,那么我在其中的直接选择可能是 ncurses——它的设计相当体面,使用起来相当容易,而且便携性也相当好。

        如果我确定可移植性根本不重要,并且我(例如)纯粹为 Windows 编写代码,那么值得考虑使用本机控制台功能。有争议的是,这很少是一个很好的权衡——你失去了所有的可移植性,并且只获得了一点的速度,等等。

        【讨论】:

          【解决方案4】:
          printf ( "\033[2;1H");     // move to 2nd line
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2013-11-19
            • 2010-11-29
            • 1970-01-01
            • 2010-10-06
            • 2019-07-01
            • 2017-02-20
            • 1970-01-01
            相关资源
            最近更新 更多