如何在不跳转到文本末尾的情况下在 c 中打印?

how print in c without jumping to end of text?

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

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

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

您甚至可以查出终端的当前大小。那是特定于平台的;对于 Linux,这里有解释:How to get terminal window width?

在 Unix 上(包括 Linux 和 Mac),有内置的名为 more and less 的命令行程序可以完全按照您的描述进行操作。 more 是一个在显示下一页输出之前简单地等待用户按回车键或 space 的程序。 less 略有改进,它允许 vi 编辑器击键(例如 j 和 k)在输出中上下滚动。

more 也可以在 Windows 命令行中使用。您甚至可以找到 less for Windows as well.

的版本
c:\users\selbie> your_program.exe | more

$> ./your_program | less

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

不是标准方式,不。

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

根据您的终端,可能可以通过输出特殊字符来控制滚动,例如 ANSI escape codes. The ncurses library 提供了一种可移植的方式来操作终端。

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