如何在c中打印而不跳到文本结尾?

时间:2018-08-25 04:55:28

标签: c less-unix

我一般来说对编码还是很陌生的,所以请原谅我所说的任何愚蠢的事情。

我正在尝试使用printf()打印(用c表示)相当长的文本,但是由于它不能完全适合屏幕显示,它会跳到文本的结尾,并且除非向上滚动,否则开头是不可见的。有没有一种简单的方法可以让它打印长文本,但停留在开始位置,并允许用户在阅读下一条命令之前向下滚动,以便阅读?

3 个答案:

答案 0 :(得分:2)

在Unix(包括Linux和Mac)上,内置了名为moreless的命令行程序,它们完全可以满足您的描述。 more是一个程序,仅在显示下一页输出之前等待用户按下Enter或空格。 less稍有改进,因为它允许vi编辑器的击键(例如j和k)在输出中上下滚动。

Windows命令行上也提供

more。您甚至可以找到less for Windows as well的版本。

c:\users\selbie> your_program.exe | more

$> ./your_program | less

关于如何以编程方式执行此操作,这会有些困难,因为它将涉及测量控制台宽度和实现自己的滚动缓冲区。可能会有开源库提供此功能,但控制台环境已经为产生大量输出的应用提供了解决方案。

答案 1 :(得分:0)

并非如此,尽管您可能会找到一种合理而简单的解决方案,即仅打印一定数量的行(例如30行),然后提示用户在显示更多行之前按Enter键。

您甚至可以找到终端的当前大小。那是特定于平台的;对于Linux的解释如下:How to get terminal window width?

答案 2 :(得分:0)

不是标准方式,不是。

您在C语言中的输出流只是一个字符流-滚动由您的终端处理。

取决于您的终端,可能可以通过输出特殊字符(例如ANSI escape codes)来控制滚动。 ncurses library提供了一种便捷的方式来操作终端。

但是,如果您只是想以更方便的方式查看输出(或实际上是任何命令输出),@ selbie的答案是最好的:使用moreless。这样可以避免程序中任何额外的复杂性。