c - 使用 C 打印行而不覆盖尚未在终端中提交的用户输入

标签 c command-line terminal printf

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

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

欢迎所有想法

最佳答案

最基本的问题是,用户键入一些输入与运行的所有线程无关,从程序的角度来看,它看起来很像另一个生成数据的线程。

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

All ideas are welcome.

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

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

关于c - 使用 C 打印行而不覆盖尚未在终端中提交的用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58197728/

相关文章:

在源中配置 clang-format

c - 使用飞思卡尔塔板的简单计算器

linux - 通过脚本验证 sudoing 密码

macos - 终端(OS X),来自文件的命令队列

go - 控制台中的多行输入

Python 元组根据最后一个元素排序

c - 如何使用 C 有选择地将变量存储在内存段中?

代码正在覆盖数组

java - 如何从命令行 Java 应用程序更改命令提示符(控制台)窗口标题?

linux - IA 32 读取命令行参数