gpt4 book ai didi

c++ - 将换行符插入输出流

转载 作者:行者123 更新时间:2023-12-02 10:32:14 25 4
gpt4 key购买 nike

假设我们有一个终端,并且我们的程序打印了一些文本:

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帖子不同。
在最后一行,我不知道用户输入了什么,所以我不能只重印它。
也许关闭缓冲(这样我就可以在没有用户按下Enter的情况下获得输入),并且还禁用了字符回显功能,因此我可以完全操纵终端,但这太复杂了,而且我不知道谁可以禁用Windows上的回显功能。

最佳答案

(I don't want to use ncurse)



没有一般的方法可以做到这一点。 C / C++流基本上是文件,其行为方式相同:如果要在文件中插入一行,则需要从插入点重写该文件。这同样适用于您的输入,也可能来自文件而不是键盘。

根据您的操作系统,有不同的方法可以执行“图形”操作。在类似Unix的系统上,假定终端支持这些代码(存在ANSI转义代码,xterm代码,WYSE代码,vt100代码等),则ncurses会发出定位字符的转义代码(在DOS下)。 setCursorPosition(),gotoxy()等)。光标定位通常被认为是“图形”操作。

基本上,使用ncurses,您需要分割屏幕并在提示后在底部设置输入行。然后,在打印内容之前,捕获当前光标位置并滚动屏幕顶部,打印文本,然后在输入点恢复当前位置。

根据这个答案- Subwindows with ncurses-看来ncurses使这个过程变得更加简单。

关于c++ - 将换行符插入输出流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61844095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com