gpt4 book ai didi

c++ - 在Windows控制台中排队

转载 作者:行者123 更新时间:2023-11-28 02:46:14 25 4
gpt4 key购买 nike

似乎您可以使用 \b 在控制台中从当前行返回一个字符。但是,控制台似乎不能跳一行。

我想将无效的用户输入标记为红色。键入输入后,用户按 Enter 将不可删除的新行放入控制台。

我的计划是执行以下操作:

  1. 检查输入的有效性。
  2. 如果无效,打印input.length()+1\b
  3. 将控制台颜色变为红色
  4. 打印输入,打印\n

但是,\b 不会跳回到用户输入所在的行。所以我有 B 计划:

  1. 记住用户输入之前的字符串长度(query_string)
  2. 检查输入的有效性。
  3. 如果无效,去排队(输入输入的地方)
  4. 跳转到query_string.length()个字符
  5. 将控制台颜色变为红色
  6. 打印输入,打印\n

但是,我不知道如何使用 console API 执行此操作.

最佳答案

至少有两种方法可以做到这一点。

正如@chris 在评论中暗示的那样,一种方法是保存用户开始键入的光标位置。当你发现输入错误时,你将光标设置回那个位置,并更改他输入的字符的文本属性。

您可能不想将窗口向上滚动一行。如果这样做,则当用户出错时,窗口将显示为“跳跃”。这是一个非常刺耳的用户界面体验。但如果你想尝试,可以调用ScrollConsoleScreenBuffer .

另一种方法是 change the console mode这样它就不会在用户键入字符时自动回显字符。相反,您单独读取每个字符,将其附加到您的输入缓冲区,并在用户按下 Enter 时进行验证。如果输入有效,则发出换行符以移至下一行。否则你备份并突出显示错误的输入。这听起来需要做更多的工作,但其实并没有那么困难,而且可以带来更好的 UI 体验。

关于c++ - 在Windows控制台中排队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24308022/

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