我正在尝试实现具有退格功能的控制台程序。控制台接受我定义的许多有效命令。例如:
输入:
输出:
我使用switch语句,它检查getchar()
返回的当前char。
switch (inChar)
{
case '\r':
case '\n':
{
...
}
case 0x18: // ^x
{
...
}
case 0x08: // backspace
{
printf("\b \b");
break;
}
default:
{
inBuffer[inBufIndx++] = inChar;
inBuffer[inBufIndx] = 0;
printf("%c", inChar); // echo character
}
}
上面的代码给出了擦除字符的外观,但是放置了一个空格char。这适用于大多数情况,例如从o
删除helo
但在删除o
helpo
时无法正常工作。由于在o
如何在需要删除的输入结尾处为字符实现退格?
编辑: rici完全正确。我没有从我的inBuffer中删除我在控制台中擦除的字符。下面的代码给出了所需的功能。
case 0x08:
{
printf("\b \b");
inBuffer[inBufIndx--] = NULL;
break;
}
答案 0 :(得分:1)
据推测,您需要从inBuffer
中删除字符(通过递减inBufIdx
并使用0
覆盖旧字符)。屏幕显示的内容应该是无关紧要的。
顺便说一下,退格空间 - 退格序列不会在右边缘工作
答案 1 :(得分:0)
@Eugene Sh。答案对我有用,但我的 tcsh shell 中没有圆括号: printf "\b"