gpt4 book ai didi

c++ - 如何防止过度打字

转载 作者:太空狗 更新时间:2023-10-29 19:53:27 25 4
gpt4 key购买 nike

我正在尝试用 C++ 制作一个简单的聊天应用程序。它可以工作,但是,如果有人在别人打字的时候输入了一些东西。它就像覆盖了他们正在输入的内容。我将图片链接为以下示例。

我用于客户端和服务器的代码可以在这里找到:

Client

Server

图片:

之前 enter image description hereenter image description here

最佳答案

一种方法是在用户第一次开始输入一行文本时设置一个标志——然后如果您在设置该标志时从网络接收数据,只需将接收到的数据排队到某个本地数据结构中(即不要打印它)直到本地用户按下回车键。当本地用户按下回车键时,您将打印出您在他键入时排队的所有数据,并取消设置标志。

当然,这种方法有几个缺点:

  • 如果本地用户输入了一些文本但从未按回车键,他将永远看不到任何传入的远程文本。这可能是一个问题,例如如果用户按下空格并走开。
  • C/C++ 中的 cin/stdin 功能通常在每行的基础上工作,您需要将终端设置为原始/非规范模式,以便在本地用户仅输入一个字符时让它报告(而不是缓冲字符直到本地用户按下回车键,然后立即将整行文本报告给您的程序)

另一种方法是将本地用户的文本和远程用户的文本保存在物理上分开的区域(例如,窗口的上半部分和下半部分,就像许多聊天程序所做的那样)。要做到这一点,需要比 vanilla C/C++ stdin/stdout/cin/cout API 给你更多的控制;你需要创建一个带有两个独立文本小部件的 GUI 窗口(使用 Win32 或 Qt 或其他一些 GUI API),或者如果你想将所有内容都保存在 MS-DOS 窗口中,你可以使用类似 PDCurses 的东西实现这一点。

不过,这些选项中的任何一个都不是微不足道的——与您的聊天应用程序的其余部分相比,它们可能需要更多的时间和精力来实现。如果是我,并且聊天应用程序只是一个学习练习,我很想简单地将当前行为记录为“已知限制”,而不用担心修复它。

关于c++ - 如何防止过度打字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13898464/

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