我想问一下从字符串中插入和删除字符的问题。 这是代码:
void Edit::input() {
int len = 0;
COORD cord;
cord.X = _x;
cord.Y = _y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cord);
while (true) {
char ch = _getch();
if (ch == 13)
{
break;
}
else if (ch == 8)
{
if (len == 0)
{
continue;
}
pusty.pop_back();
std::cout << "\b \b";
len--;
}
else if (len == 6) {
break;
}
else {
pusty.push_back(ch);
len++;
}
std::cout << ch;
}
}
究竟是什么问题?我有窗口的X和Y的坐标,在这个窗口中输入文本,整个字符串的长度是6个字符。当len
值位于最后一个元素时,我想要使用退格键时,问题出现了。然后退格在第7个索引上创建空格。下图显示了该问题。如何避免这个问题?感谢所有反馈。
答案 0 :(得分:0)
额外的空间是由于使用getch
,它回显到控制台以及将角色返回给你。这意味着达到了控制台输出的第7个位置,因此背景被绘制。
您只需要在打印\b \b
之前将背景颜色设置为黑色(与您在示例中将其设置为绿松石的方式类似),然后将其设置回绿松石 - 这样就可以了隐藏你的幻影额外角色。
而不是使用getch
,你应该考虑学习ncurses
- 它提供了非常有用的功能,可以在这种情况下让生活变得更轻松(比如getch
相当于没有回声)。它是跨平台的,因此您可以在Windows上使用它。