如何在不使用空格字符的情况下使用backspace擦除控制台中的最后一个字符?

如何在不使用空格字符的情况下使用backspace擦除控制台中的最后一个字符?,c,console,console-application,C,Console,Console Application,我正在尝试实现一个具有退格功能的控制台程序。控制台接受我定义的许多有效命令。例如: 输入: 输出: 我使用的是switch语句,它检查getchar()返回的当前字符 上面的代码给出了删除字符的外观,但放置了一个空格字符。这适用于大多数情况,例如清除helo的o关闭,但在清除o关闭helpo时不起作用。由于打印在o 如何对需要擦除的输入末尾的字符执行退格 编辑:rici完全正确。我没有从我的inBuffer中删除控制台中删除的字符。下面的代码提供了所需的功能 case 0x0

我正在尝试实现一个具有退格功能的控制台程序。控制台接受我定义的许多有效命令。例如:

输入:

输出:

我使用的是switch语句,它检查
getchar()
返回的当前字符

上面的代码给出了删除字符的外观,但放置了一个空格字符。这适用于大多数情况,例如清除
helo
o
关闭,但在清除
o
关闭
helpo
时不起作用。由于打印在
o

如何对需要擦除的输入末尾的字符执行退格

编辑:rici完全正确。我没有从我的inBuffer中删除控制台中删除的字符。下面的代码提供了所需的功能

        case 0x08:
        {
            printf("\b \b");
            inBuffer[inBufIndx--] = NULL;
            break;
        }

您可能需要从
inBuffer
中删除字符(通过递减
inBufIdx
并用
0
覆盖旧字符)。屏幕上显示的内容应该是无关的


顺便说一下,退格空间退格序列在右边距处不起作用。

@Eugene Sh。答案对我有效,但我的tcsh外壳中没有圆括号:
printf“\b”

为什么仅仅
printf(“\b”)
是不够的?我尝试了
printf(“/b”)
,但只是将光标向后移动了一个字符,并没有删除不需要的字符。上面的代码将光标向后移动,在不需要的字符上打印一个空格,然后再次将光标向后移动,以便我可以在该空格上重写。听起来您可能需要在尝试执行命令字符串之前删除命令字符串的尾随空格。控制台控件不是C标准的一部分。太棒了,这取决于你的控制台等等。没有标准的方法。来自未来的CS345同学,我和我的侏罗纪公园,谢谢;)
        case 0x08:
        {
            printf("\b \b");
            inBuffer[inBufIndx--] = NULL;
            break;
        }