3

我正在寻找一个在输入之前打印字符串的函数。我知道使用printfand可以做到这一点gets,但我希望字符串保留在给出输入的最后一行。输出在主线程中处理,输入在主线程启动的另一个线程中处理。

例如这是当前的控制台窗口(我输入了stop-command,'>' 是前缀字符串):

[12:00:00] Starting server...
>stop

当控制台输出新行时,我希望输入始终位于底线,如下所示:

[12:00:00] Starting server...
[12:00:01] Server started
>stop

我正在使用带有 Win32 和 VCL 支持的 Embarcadero C++Builder XE2。

编辑:我目前正在使用此代码,导致在“>”前缀之后打印输出:

char buf[256];
printf(">");
gets(buf);
4

2 回答 2

4

您正在寻找的是所谓的异步输入/输出。

我所做的是跟踪每个被按下的键并将其附加到一个字符串中。

当你按下退格键时,它会删除添加到字符串中的最后一个字符,当你按下回车键时,它将提交当前命令。

当输出出现时,您清除正在输入的行,打印输出,然后向下移动光标并打印出您保存在字符串中的内容。

如果你愿意,你必须对线程做一些工作,但我很确定我能够在不费太多力气的情况下完成大部分工作。

其他可能的资源:

于 2013-05-09T16:13:16.993 回答
0

尝试滚动控制台的所有行,除了最后一行,然后将您的消息打印到最后一行之前的行(类似 ScrollConsoleScreenBuffer 会帮助您)。这样输入行将始终在其位置。

于 2013-05-09T16:06:04.433 回答