1

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

我正在尝试使用 printf() 打印(在 c 中)相当长的文本,但由于它不能全部放在屏幕上,它会跳转到文本的末尾,除非您向上滚动,否则开头是不可见的。有没有一种简单的方法可以让它打印长文本但留在开头并允许用户在阅读时向下滚动,然后再输入下一个命令?

4

3 回答 3

2

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

more也可以在 Windows 命令行上使用。您甚至可以找到less 适用于 Windows的版本。

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

$> ./your_program | less

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

于 2018-08-25T05:05:14.990 回答
0

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

您甚至可以找出终端的当前大小。那是特定于平台的;对于 Linux,这里有解释:如何获取终端窗口宽度?

于 2018-08-25T05:01:36.207 回答
0

不是以标准方式,不。

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

根据您的终端,可以通过输出特殊字符(如ANSI 转义码)来控制滚动。ncurses 库提供了一种可移植的方式来操作终端。

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

于 2018-08-25T05:13:03.190 回答