我一般来说对编码还是很陌生的,所以请原谅我所说的任何愚蠢的事情。
我正在尝试使用printf()打印(用c表示)相当长的文本,但是由于它不能完全适合屏幕显示,它会跳到文本的结尾,并且除非向上滚动,否则开头是不可见的。有没有一种简单的方法可以让它打印长文本,但停留在开始位置,并允许用户在阅读下一条命令之前向下滚动,以便阅读?
答案 0 :(得分:2)
在Unix(包括Linux和Mac)上,内置了名为more和less的命令行程序,它们完全可以满足您的描述。 more
是一个程序,仅在显示下一页输出之前等待用户按下Enter或空格。 less
稍有改进,因为它允许vi编辑器的击键(例如j和k)在输出中上下滚动。
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的答案是最好的:使用more
或less
。这样可以避免程序中任何额外的复杂性。