如何使用退格键擦除控制台中的最后一个字符,而不使用空格字符?

时间:2017-07-06 19:42:47

标签: c console console-application

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

输入:

enter image description here

输出:

enter image description here

我使用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

处打印的空格字符,我的shell无法再解释该命令

如何在需要删除的输入结尾处为字符实现退格?

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

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

2 个答案:

答案 0 :(得分:1)

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

顺便说一下,退格空间 - 退格序列不会在右边缘工作

答案 1 :(得分:0)

@Eugene Sh。答案对我有用,但我的 tcsh shell 中没有圆括号: printf "\b"