控制程序输出的滚动

标签 c scroll stdout

在 C 程序中,如果一次输出大量文本,则屏幕可能没有足够的空间来显示全部文本,并且用户可能会错过一些信息。

如何让用户控制滚动来读取此类输出?

最佳答案

@Veltas,是正确的,没有可移植的方法,甚至没有假设可以让您始终做到这一点。通常,您输出输出并让调用者决定如何处理它(管道和过滤器模型)。他们可能决定将其重定向到文件、终端或过滤器。常见的桌面操作系统具有处理溢出的实用程序(tee、more、less、findstr、grep 等),但有时您希望应用程序更具交互性,也许您需要它们读取然后响应该输出?然后,您的选择是使用配置文件或命令行参数以及显示设备高度和宽度的“合理默认值”。使用这些,您可以计算正在喷出的行数,并停止 ScrollView 端口。

有一些细微差别需要考虑。如何处理比视口(viewport)宽度长的线?通常只是让显示器换行并将输出计数为多行,但您必须做一些数学运算,并且无法确定显示器确实进行了换行。然后是只在单词边界处换行还是在换行时中断单词,哪些 ANSI 转义码可用(如果有)?实际上有很多属性需要考虑。

幸运的是,您可以使用或多或少的可移植终端/显示库,它们涵盖了大多数常见的操作系统控制台环境。

我确信我困惑的大脑目前无法记忆起其他一些内容。

关于控制程序输出的滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50887457/

相关文章:

java - 使scrollRectToVisible与使用GroupLayout布局的面板一起使用

javascript - HTML & JavaScript - 将滚动 Action 从一个元素传递到另一个元素

c# - 是什么过早地破坏了我的 Process.StartInfo.OutputDataReceived 回调?

linux - 查看导出的控制台彩色日志

c - 保留两个字符串的公共(public)前缀.....C编程...段错误错误

c - (伪)C 中的 OOP 从其函数指针获取结构对象

c - 在 C 中创建递归数据结构的方法

javascript - 在 div 中垂直滚动多个背景图像以及文本

stdout - 为什么配置了 NSSM 的服务输出错误信息到标准输出

c - C <curses.h> 中的段错误