将换行符插入输出流
Insert newline into output stream
假设我们有一个终端,我们的程序打印了一些文本:
line 1
line 2
line 3
然后我们回到第 3 行的开头。我想打印一些文本而不覆盖之前打印的文本(我不想使用 ncurse),所以我希望它看起来像:
line 1
line 2
inserted line
line 3
如果我只打印 \n
,我会得到奇怪的格式。
有什么办法吗?
更多信息:
我有另一个线程记录一些数据,还有一个 > 用于用户输入,所以像这样:
[info]: log
> command
随着它记录更多,它应该看起来像:
[info]: log
[info]: more log
>command
不,它不同于 this post。
最后一行不知道用户输入的是什么,所以不能直接转载。
也许关闭缓冲(这样我就可以在用户不按 enter 的情况下获得输入),并且还禁用字符回显以便我可以完全操纵终端,但这太复杂了,而且我不知道要在 [=] 上禁用回显29=].
(I don't want to use ncurse)
没有通用的方法可以做到这一点。 C/C++ 流基本上是文件,其行为方式相同:如果要在文件中插入一行,则需要从插入点重写文件。这同样适用于您的输入,它也可能来自文件而不是键盘。
根据您的 OS,有不同的方法可以完成 "graphical" 事情。在类 Unix 系统上,假设终端支持这些代码(有 ANSI 转义代码、xterm 代码、WYSE 代码、vt100 代码等),ncurses 会发出定位字符的转义代码。在 DOS 下,编译器具有它自己的库调用(setCursorPosition()、gotoxy() 等)。游标定位一般被认为是"graphical"操作。
基本上,使用 ncurses,您会想要拆分屏幕并在提示后将输入行设置在底部。然后,在打印之前,抓住当前光标位置并滚动屏幕顶部,打印文本,然后在输入点恢复当前位置。
基于这个答案 - Subwindows with ncurses - 似乎 ncurses 使这更简单。
假设我们有一个终端,我们的程序打印了一些文本:
line 1
line 2
line 3
然后我们回到第 3 行的开头。我想打印一些文本而不覆盖之前打印的文本(我不想使用 ncurse),所以我希望它看起来像:
line 1
line 2
inserted line
line 3
如果我只打印 \n
,我会得到奇怪的格式。
有什么办法吗?
更多信息:
我有另一个线程记录一些数据,还有一个 > 用于用户输入,所以像这样:
[info]: log
> command
随着它记录更多,它应该看起来像:
[info]: log
[info]: more log
>command
不,它不同于 this post。 最后一行不知道用户输入的是什么,所以不能直接转载。 也许关闭缓冲(这样我就可以在用户不按 enter 的情况下获得输入),并且还禁用字符回显以便我可以完全操纵终端,但这太复杂了,而且我不知道要在 [=] 上禁用回显29=].
(I don't want to use ncurse)
没有通用的方法可以做到这一点。 C/C++ 流基本上是文件,其行为方式相同:如果要在文件中插入一行,则需要从插入点重写文件。这同样适用于您的输入,它也可能来自文件而不是键盘。
根据您的 OS,有不同的方法可以完成 "graphical" 事情。在类 Unix 系统上,假设终端支持这些代码(有 ANSI 转义代码、xterm 代码、WYSE 代码、vt100 代码等),ncurses 会发出定位字符的转义代码。在 DOS 下,编译器具有它自己的库调用(setCursorPosition()、gotoxy() 等)。游标定位一般被认为是"graphical"操作。
基本上,使用 ncurses,您会想要拆分屏幕并在提示后将输入行设置在底部。然后,在打印之前,抓住当前光标位置并滚动屏幕顶部,打印文本,然后在输入点恢复当前位置。
基于这个答案 - Subwindows with ncurses - 似乎 ncurses 使这更简单。