看来您可以使用\b
从控制台中的当前行返回一个字符。但是,控制台似乎无法向上跳一行。
我想将无效的用户输入标记为红色。键入输入内容后,用户按Enter键,这将在控制台中添加不可删除的新行。
我的计划是执行以下操作:
检查input
的有效性。
如果无效,则打印input.length()+1
次\b
将控制台颜色变成红色
打印input
,打印\n
但是,\b
不会跳回到用户输入所在的行。所以我有计划B:
记住用户输入之前的字符串长度(query_string
)
检查input
的有效性。
如果无效,请排队(输入输入的位置)
跳到query_string.length()
字符
将控制台颜色变成红色
打印input
,打印\n
但是,我不知道如何使用console API来执行此操作。
最佳答案
至少有两种方法可以执行此操作。
一种方法是,如@chris所暗示,是保存用户开始键入位置的光标位置。如果发现输入错误,则将光标重新设置到该位置,并更改他输入的字符的text属性。
您可能不想将窗口向上滚动一行。如果您这样做,则当用户出错时,窗口将显示为“跳转”。这确实是一种令人讨厌的用户界面体验。但是,如果您想尝试,可以致电ScrollConsoleScreenBuffer。
另一种方法是change the console mode,这样当用户键入字符时它不会自动回显字符。取而代之的是,您分别读取每个字符,将其附加到输入缓冲区中,然后当用户按下Enter键时,您将进行验证。如果输入有效,则发出换行符以移至下一行。否则,请备份并突出显示错误的输入。这听起来需要做更多的工作,但这并不困难,并且可以带来更好的UI体验。
关于c++ - 在Windows控制台中排队,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24308022/