c - 打印行而不覆盖尚未使用 C 在终端中提交的用户输入
问题描述
是否可以使用 C 将输出打印到终端,以便用户的不完整输入保持不变?
用例是一个多线程程序,它在等待用户输入下一个任务的同时输出批量结果。问题是,在将输入输入回程序时,每当程序输出另一行时,不完整的输入就会在输出行中被扫除。
欢迎所有想法
解决方案
最基本的问题是,用户输入一些输入独立于你运行的所有线程,从你的程序来看,它看起来很像另一个线程生成数据。
现在您遇到了麻烦,您需要通过某种方式同步您的程序和用户。因此,您需要对屏幕进行单一控制。
欢迎所有想法。
好吧,这就是想法(但是,您将生成依赖于特定于操作系统的方法的不可移植代码):
- 读取用户输入而不将其打印在屏幕上——这是特定于操作系统的,但在 Windows 上,您可能会使用
getch
fromconio.h
header。 - 用户输入需要缓冲,您可能需要对用户删除字符(必要)或使用箭头移动光标进行特殊处理(为简单起见,您可能不支持,但用户会不太满意)。
- 输出自己的数据时,覆盖用户输入(您可能只是用ansi 转义码移动光标),但请确保清除所有写入的数据,即在必要时用额外的空格覆盖。
- 然后将用户的输入重新打印到下一行。
推荐阅读
- python - TypeError: __init__() 为参数 'fieldnames' 获得了多个值
- javascript - 用绝对值替换字符
- javascript - 什么是“JS 数据仓库”?
- javascript - 在 index.html 中使用 node.js 脚本
- java - Firebase 登录 - 加载卡住
- angular - 将 crypto-js 与 Angular 5 项目一起使用时出现意外令牌错误
- nativescript - NativeScript 混合移动应用程序:跟踪/捕获崩溃
- sas - 如何按组汇总 SAS 中的观察结果?
- java - 在 when() 子句中匹配 mockito obj.getMethod().equals(x)
- javascript - 使用纯 javascript 如何在结束标记之前插入 html?