在 C 程序中,如果一次输出大量文本,则屏幕可能没有足够的空间来显示全部文本,并且用户可能会错过一些信息。
如何让用户控制滚动来读取此类输出?
最佳答案
@Veltas,是正确的,没有可移植的方法,甚至没有假设可以让您始终做到这一点。通常,您输出输出并让调用者决定如何处理它(管道和过滤器模型)。他们可能决定将其重定向到文件、终端或过滤器。常见的桌面操作系统具有处理溢出的实用程序(tee、more、less、findstr、grep 等),但有时您希望应用程序更具交互性,也许您需要它们读取然后响应该输出?然后,您的选择是使用配置文件或命令行参数以及显示设备高度和宽度的“合理默认值”。使用这些,您可以计算正在喷出的行数,并停止 ScrollView 端口。
有一些细微差别需要考虑。如何处理比视口(viewport)宽度长的线?通常只是让显示器换行并将输出计数为多行,但您必须做一些数学运算,并且无法确定显示器确实进行了换行。然后是只在单词边界处换行还是在换行时中断单词,哪些 ANSI 转义码可用(如果有)?实际上有很多属性需要考虑。
幸运的是,您可以使用或多或少的可移植终端/显示库,它们涵盖了大多数常见的操作系统控制台环境。
我确信我困惑的大脑目前无法记忆起其他一些内容。
关于控制程序输出的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887457/