首页 > 解决方案 > 打印行而不覆盖尚未使用 C 在终端中提交的用户输入

问题描述

是否可以使用 C 将输出打印到终端,以便用户的不完整输入保持不变?

用例是一个多线程程序,它在等待用户输入下一个任务的同时输出批量结果。问题是,在将输入输入回程序时,每当程序输出另一行时,不完整的输入就会在输出行中被扫除。

欢迎所有想法

标签: ccommand-lineterminalprintf

解决方案


最基本的问题是,用户输入一些输入独立于你运行的所有线程,从你的程序来看,它看起来很像另一个线程生成数据。

现在您遇到了麻烦,您需要通过某种方式同步您的程序和用户。因此,您需要对屏幕进行单一控制。

欢迎所有想法。

好吧,这就是想法(但是,您生成依赖于特定于操作系统的方法的不可移植代码):

  • 读取用户输入而不将其打印在屏幕上——这是特定于操作系统的,但在 Windows 上,您可能会使用getchfrom conio.hheader。
  • 用户输入需要缓冲,您可能需要对用户删除字符(必要)或使用箭头移动光标进行特殊处理(为简单起见,您可能不支持,但用户会不太满意)。
  • 输出自己的数据时,覆盖用户输入(您可能只是用ansi 转义码移动光标),但请确保清除所有写入的数据,即在必要时用额外的空格覆盖。
  • 然后将用户的输入重新打印到下一行。

推荐阅读