使用C在不覆盖用户输入的情况下打印尚未在终端中提交的行

使用C在不覆盖用户输入的情况下打印尚未在终端中提交的行,c,command-line,terminal,printf,C,Command Line,Terminal,Printf,是否可以使用C将输出打印到终端,以便用户的不完整输入保持不变 用例是一个多线程程序,在等待用户输入下一个任务时输出批量结果。问题是,在将输入输入回程序时,每当程序输出另一行时,不完整的输入就会被扫到输出行中 欢迎所有想法可能您需要某种GUI来实现这一点,这样输入和输出区域就可以分开,而不是使用命令行程序 您可以使用缓冲区直接写入终端,这是特定于操作系统的。理论上,您可以使用控制台窗口的上半部分进行输入,下半部分进行输出。这是分配的工作,虽然,并将类似于制作一个控制台游戏 或者,您可以使用控制台

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

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


欢迎所有想法

可能您需要某种GUI来实现这一点,这样输入和输出区域就可以分开,而不是使用命令行程序

您可以使用缓冲区直接写入终端,这是特定于操作系统的。理论上,您可以使用控制台窗口的上半部分进行输入,下半部分进行输出。这是分配的工作,虽然,并将类似于制作一个控制台游戏


或者,您可以使用控制台进行输入,并将结果写入.txt文件。最基本的问题是,用户键入的某些输入独立于运行的所有线程,从程序的角度看,它看起来非常像生成数据的另一个线程

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

欢迎提出任何意见

然而,这里的想法是,您将依靠操作系统特定的方式生成不可移植的代码:

读取用户输入而不将其打印在屏幕上–这是特定于操作系统的,不过,在Windows上,您可以使用来自conio.h头的getch。 用户输入需要缓冲,用户删除必要的字符或使用箭头移动光标可能需要特殊处理。为了简单起见,您可能不支持,但用户会不太满意。 当输出自己的数据时,覆盖用户输入,您可以只移动光标,但请确保清除所有写入的数据,即。E如有必要,使用附加空格覆盖。 然后将用户的输入重新打印到下一行。
我认为唯一的方法是使用屏幕寻址,在不覆盖用户文本的情况下移动光标进行输出,然后再次将光标移动到上一个位置。可能吗?对真正的问题是以1/可靠2/可移植的方式进行。一个简单的纯终端解决方案很容易被打破:调整窗口的大小或很长的输入通常就足够了。这就是为什么通常最好依靠像ncurses这样的图书馆来处理困难的东西。是的,这是可能的。ncurses是用C语言编写的,它做到了这一点。你应该自己做吗?不可以。您应该使用ncurses。请回答您的问题并添加更多详细信息,以了解用户希望键入的内容。当用户按下返回键时,是否需要处理某个命令?这个命令能用多长时间?如果可以是多行,是否需要查看完整的命令?用户应该能够使用光标键或类似的键来编辑输入吗?听起来好像有多个线程在终端上执行I/O。不要那样做。将所有输出与I/O线程同步,以便单个线程可以正确管理I/O。